pp upload: image verification using serializers

This commit is contained in:
AdrienLSH 2024-02-08 17:21:26 +01:00
parent 36aee6c881
commit b6ebd9d326
3 changed files with 15 additions and 6 deletions

View File

@ -85,7 +85,7 @@ export default class extends AbstractAuthentificateView
return; return;
} }
let form_data = new FormData(); let form_data = new FormData();
form_data.append("file", avatar.files[0]); form_data.append("avatar", avatar.files[0]);
await client.me.change_avatar(form_data); await client.me.change_avatar(form_data);
this.display_avatar(); this.display_avatar();
} }

View File

@ -1,5 +1,6 @@
from rest_framework import serializers from rest_framework import serializers
from .models import ProfileModel from .models import ProfileModel
from django.conf import settings
class ProfileSerializer(serializers.ModelSerializer): class ProfileSerializer(serializers.ModelSerializer):
@ -9,3 +10,11 @@ class ProfileSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = ProfileModel model = ProfileModel
fields = ["username", "avatar", "user_id"] fields = ["username", "avatar", "user_id"]
def validate_avatar(self, value):
'''
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;

View File

@ -8,8 +8,6 @@ from rest_framework.authentication import SessionAuthentication
from django.http import HttpRequest from django.http import HttpRequest
from django.db.models import QuerySet from django.db.models import QuerySet
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.core.files.uploadedfile import InMemoryUploadedFile
from django.conf import settings
from .serializers import ProfileSerializer from .serializers import ProfileSerializer
from .models import ProfileModel from .models import ProfileModel
@ -56,9 +54,11 @@ class MyProfileViewSet(viewsets.ModelViewSet):
return obj return obj
def perform_update(self, serializer, pk=None): def perform_update(self, serializer, pk=None):
profile: ProfileModel = self.get_object() serializer.is_valid(raise_exception=True);
avatar : InMemoryUploadedFile = self.request.data.get("file", None) profile: ProfileModel = self.get_object();
if (avatar is not None and avatar.size <= settings.PROFILE_PICTURE_MAX_SIZE): avatar = serializer.validated_data.get('avatar');
if (avatar is not None):
if (profile.avatar.name != "./profiles/static/avatars/default.avif"): if (profile.avatar.name != "./profiles/static/avatars/default.avif"):
profile.avatar.storage.delete(profile.avatar.name) profile.avatar.storage.delete(profile.avatar.name)
profile.avatar = avatar profile.avatar = avatar