added field cropped_image to User model

This commit is contained in:
Anatoly 2019-09-06 13:47:37 +03:00
parent 5449891394
commit e1d6455e81
4 changed files with 42 additions and 2 deletions

View File

@ -0,0 +1,20 @@
# Generated by Django 2.2.4 on 2019-09-06 10:45
from django.db import migrations
import easy_thumbnails.fields
import utils.methods
class Migration(migrations.Migration):
dependencies = [
('account', '0004_user_email_confirmed'),
]
operations = [
migrations.AddField(
model_name='user',
name='cropped_image',
field=easy_thumbnails.fields.ThumbnailerImageField(blank=True, default=None, null=True, upload_to=utils.methods.image_path, verbose_name='Crop image'),
),
]

View File

@ -1,5 +1,4 @@
"""Account models""" """Account models"""
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import AbstractUser, UserManager as BaseUserManager from django.contrib.auth.models import AbstractUser, UserManager as BaseUserManager
from django.contrib.auth.tokens import default_token_generator as password_token_generator from django.contrib.auth.tokens import default_token_generator as password_token_generator
@ -10,9 +9,11 @@ from django.utils import timezone
from django.utils.encoding import force_bytes from django.utils.encoding import force_bytes
from django.utils.http import urlsafe_base64_encode from django.utils.http import urlsafe_base64_encode
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext_lazy as _
from easy_thumbnails.fields import ThumbnailerImageField
from rest_framework.authtoken.models import Token from rest_framework.authtoken.models import Token
from authorization.models import Application from authorization.models import Application
from utils.methods import image_path
from utils.models import GMTokenGenerator from utils.models import GMTokenGenerator
from utils.models import ImageMixin, ProjectBaseMixin, PlatformMixin from utils.models import ImageMixin, ProjectBaseMixin, PlatformMixin
from utils.tokens import GMRefreshToken from utils.tokens import GMRefreshToken
@ -61,6 +62,9 @@ class UserQuerySet(models.QuerySet):
class User(ImageMixin, AbstractUser): class User(ImageMixin, AbstractUser):
"""Base user model.""" """Base user model."""
cropped_image = ThumbnailerImageField(upload_to=image_path,
blank=True, null=True, default=None,
verbose_name=_('Crop image'))
email = models.EmailField(_('email address'), blank=True, email = models.EmailField(_('email address'), blank=True,
null=True, default=None) null=True, default=None)
email_confirmed = models.BooleanField(_('email status'), default=False) email_confirmed = models.BooleanField(_('email status'), default=False)

View File

@ -13,10 +13,11 @@ from utils import exceptions as utils_exceptions
class UserSerializer(serializers.ModelSerializer): class UserSerializer(serializers.ModelSerializer):
"""User serializer.""" """User serializer."""
# RESPONSE # RESPONSE
email_confirmed = serializers.BooleanField() email_confirmed = serializers.BooleanField(read_only=True)
# REQUEST # REQUEST
image = serializers.ImageField(required=False) image = serializers.ImageField(required=False)
cropped_image = serializers.ImageField(required=False)
email = serializers.EmailField(required=False) email = serializers.EmailField(required=False)
username = serializers.CharField(required=False) username = serializers.CharField(required=False)
newsletter = serializers.BooleanField(required=False) newsletter = serializers.BooleanField(required=False)
@ -24,6 +25,7 @@ class UserSerializer(serializers.ModelSerializer):
class Meta: class Meta:
model = models.User model = models.User
fields = [ fields = [
'cropped_image',
'image', 'image',
'email', 'email',
'email_confirmed', 'email_confirmed',
@ -45,6 +47,12 @@ class UserSerializer(serializers.ModelSerializer):
raise serializers.ValidationError() raise serializers.ValidationError()
return value return value
def validate(self, attrs):
if ('cropped_image' in attrs or 'image' in attrs) and \
('cropped_image' not in attrs or 'image' not in attrs):
raise utils_exceptions.UserUpdateUploadImageError()
return attrs
def update(self, instance, validated_data): def update(self, instance, validated_data):
""" """
Override update method Override update method

View File

@ -120,6 +120,14 @@ class EmailConfirmedError(exceptions.APIException):
default_detail = _('Email address is already confirmed') default_detail = _('Email address is already confirmed')
class UserUpdateUploadImageError(exceptions.APIException):
"""
The exception should be raised when user tries upload an image without crop in request
"""
status_code = status.HTTP_400_BAD_REQUEST
default_detail = _('Image invalid input.')
class WrongAuthCredentials(AuthErrorMixin): class WrongAuthCredentials(AuthErrorMixin):
""" """
The exception should be raised when credentials is not valid for this user The exception should be raised when credentials is not valid for this user