settings: avatar & username (& little stuff too)
This commit is contained in:
@ -3,16 +3,17 @@ from django.db import models
|
||||
from django.contrib.auth.models import User
|
||||
from django.db.models.signals import post_save, pre_delete
|
||||
from django.dispatch import receiver
|
||||
from django.conf import settings
|
||||
from django.db.models import IntegerField
|
||||
|
||||
from games.consumers import game_manager
|
||||
|
||||
from os.path import splitext
|
||||
|
||||
|
||||
def upload_to(instance, filename: str):
|
||||
return f"./profiles/static/avatars/{instance.pk}{splitext(filename)[1]}"
|
||||
|
||||
|
||||
# Create your models here.
|
||||
class ProfileModel(models.Model):
|
||||
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||
|
@ -1,6 +1,8 @@
|
||||
from rest_framework import serializers
|
||||
from .models import ProfileModel
|
||||
from django.conf import settings
|
||||
from django.utils.translation import gettext as _
|
||||
|
||||
|
||||
class ProfileSerializer(serializers.ModelSerializer):
|
||||
|
||||
@ -16,5 +18,5 @@ class ProfileSerializer(serializers.ModelSerializer):
|
||||
Check that the image is not too large
|
||||
'''
|
||||
if value.size > settings.PROFILE_PICTURE_MAX_SIZE:
|
||||
raise serializers.ValidationError('Image is too large.');
|
||||
return value;
|
||||
raise serializers.ValidationError(_('Image is too large.'))
|
||||
return value
|
||||
|
@ -4,7 +4,7 @@ from . import viewsets
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
path("settings", viewsets.MyProfileViewSet.as_view({'patch': 'partial_update'}), name="my_profile_page"),
|
||||
path("settings", viewsets.MyProfileViewSet.as_view({'patch': 'partial_update', 'delete': 'delete_avatar'}), name="my_profile_page"),
|
||||
path("me", viewsets.MyProfileViewSet.as_view({'get': 'retrieve'}), name="my_profile_page"),
|
||||
path("", viewsets.ProfileViewSet.as_view({'get': 'list'}), name="profiles_list"),
|
||||
path("block", views.BlocksView.as_view(), name="block_page"),
|
||||
@ -12,5 +12,4 @@ urlpatterns = [
|
||||
path("friend", views.FriendsView.as_view(), name="friend_page"),
|
||||
path("user/<str:username>", viewsets.ProfileViewSet.as_view({'get': 'retrieve'}), name="profile_page"),
|
||||
path("id/<int:pk>", viewsets.ProfileViewSet.as_view({'get': 'retrieve_id'}), name="profile_page"),
|
||||
|
||||
]
|
||||
|
@ -1,4 +1,3 @@
|
||||
from rest_framework import permissions
|
||||
from rest_framework.parsers import MultiPartParser, FormParser
|
||||
from rest_framework import permissions, status
|
||||
from rest_framework import viewsets
|
||||
@ -42,28 +41,35 @@ class ProfileViewSet(viewsets.ModelViewSet):
|
||||
profile["avatar"] = profile["avatar"][profile["avatar"].find("static") - 1:]
|
||||
return Response(serializer.data)
|
||||
|
||||
class MyProfileViewSet(viewsets.ModelViewSet):
|
||||
|
||||
class MyProfileViewSet(viewsets.ModelViewSet):
|
||||
permission_classes = (permissions.IsAuthenticated,)
|
||||
authentication_classes = (SessionAuthentication,)
|
||||
serializer_class = ProfileSerializer
|
||||
queryset = ProfileModel.objects.all
|
||||
queryset = ProfileModel.objects.all()
|
||||
|
||||
def get_object(self):
|
||||
obj = self.queryset().get(pk=self.request.user.pk)
|
||||
obj = self.queryset.get(pk=self.request.user.pk)
|
||||
return obj
|
||||
|
||||
def perform_update(self, serializer, pk=None):
|
||||
serializer.is_valid(raise_exception=True);
|
||||
profile: ProfileModel = self.get_object();
|
||||
avatar = serializer.validated_data.get('avatar');
|
||||
def perform_update(self, serializer: ProfileSerializer, pk=None):
|
||||
serializer.is_valid(raise_exception=True)
|
||||
avatar = serializer.validated_data.get('avatar')
|
||||
profile: ProfileModel = self.get_object()
|
||||
|
||||
if (avatar is not None):
|
||||
if (profile.avatar.name != "./profiles/static/avatars/default.avif"):
|
||||
profile.avatar.storage.delete(profile.avatar.name)
|
||||
profile.avatar = avatar
|
||||
profile.save()
|
||||
|
||||
serializer.save()
|
||||
|
||||
def delete_avatar(self, request, pk=None):
|
||||
profile = self.get_object()
|
||||
if (profile.avatar.name != './profiles/static/avatars/default.avif'):
|
||||
profile.avatar.storage.delete(profile.avatar.name)
|
||||
profile.avatar.name = './profiles/static/avatars/default.avif'
|
||||
profile.save()
|
||||
return Response(ProfileSerializer(profile).data)
|
||||
|
||||
def retrieve(self, request: HttpRequest, pk=None):
|
||||
instance: ProfileModel = self.get_object()
|
||||
instance.avatar.name = instance.avatar.name[instance.avatar.name.find("static") - 1:]
|
||||
|
Reference in New Issue
Block a user