settings: avatar & username (& little stuff too)

This commit is contained in:
AdrienLSH
2024-03-11 15:21:47 +01:00
parent 4b3be86b2e
commit 4238b3d2be
19 changed files with 302 additions and 214 deletions

View File

@ -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)

View File

@ -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

View File

@ -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"),
]

View File

@ -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:]