From 516c4458ac7c053bf83d5cf6bef1f3d100cc8f33 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Tue, 1 Oct 2019 17:11:24 +0300 Subject: [PATCH 1/3] Make model name translated --- apps/main/models.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/main/models.py b/apps/main/models.py index 2270cbf9..fa6cf7d1 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -349,7 +349,9 @@ class Carousel(models.Model): @property def model_name(self): - return self.content_object.__class__.__name__ + if hasattr(self.content_object, 'establishment_type'): + return self.content_object.establishment_type.name_translated + class Page(models.Model): From 9793c0a49f3e967b5ab4d6967d3dd2ab98598e39 Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Tue, 1 Oct 2019 17:42:37 +0300 Subject: [PATCH 2/3] Resend confirmation email method --- apps/authorization/serializers/common.py | 30 +++++++++++++++++++++++- apps/authorization/urls/common.py | 1 + apps/authorization/views/common.py | 11 +++++++++ 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/apps/authorization/serializers/common.py b/apps/authorization/serializers/common.py index 5d8bb3a8..e19fdae2 100644 --- a/apps/authorization/serializers/common.py +++ b/apps/authorization/serializers/common.py @@ -4,7 +4,7 @@ from django.contrib.auth import authenticate from django.contrib.auth import password_validation as password_validators from django.db.models import Q from rest_framework import serializers -from rest_framework import validators as rest_validators +from rest_framework.generics import get_object_or_404 from account import models as account_models from authorization import tasks @@ -76,6 +76,34 @@ class SignupSerializer(serializers.ModelSerializer): return obj +class ReconfirmSerializer(serializers.ModelSerializer): + email = serializers.EmailField(write_only=True) + + class Meta: + model = account_models.User + fields = ('email',) + + def validate_email(self, value): + """Validate email""" + if not account_models.User.objects.filter(email=value).filter(email_confirmed=False).exists(): + raise serializers.ValidationError() + return value + + def create(self, validated_data): + """Override create method""" + queryset = account_models.User.objects.all() + obj = get_object_or_404(queryset, email=validated_data.get('email').lower()) + if settings.USE_CELERY: + tasks.send_confirm_email.delay( + user_id=obj.id, + country_code=self.context.get('request').country_code) + else: + tasks.send_confirm_email( + user_id=obj.id, + country_code=self.context.get('request').country_code) + return obj + + class LoginByUsernameOrEmailSerializer(SourceSerializerMixin, serializers.ModelSerializer): """Serializer for login user""" diff --git a/apps/authorization/urls/common.py b/apps/authorization/urls/common.py index 4e6e59e1..213744d4 100644 --- a/apps/authorization/urls/common.py +++ b/apps/authorization/urls/common.py @@ -29,6 +29,7 @@ urlpatterns_oauth2 = [ urlpatterns_jwt = [ path('signup/', views.SignUpView.as_view(), name='signup'), + path('signup/reconfirm', views.ReconfirmView.as_view(), name='signup-reconfirm'), path('signup/confirm///', views.ConfirmationEmailView.as_view(), name='signup-confirm'), path('login/', views.LoginByUsernameOrEmailView.as_view(), name='login'), diff --git a/apps/authorization/views/common.py b/apps/authorization/views/common.py index bb337dce..5d789c8d 100644 --- a/apps/authorization/views/common.py +++ b/apps/authorization/views/common.py @@ -164,6 +164,17 @@ class SignUpView(generics.GenericAPIView): return Response(status=status.HTTP_201_CREATED) +class ReconfirmView(generics.CreateAPIView): + """ Resends confirmation email whether user's still not confirmed """ + permission_classes = (permissions.AllowAny,) + serializer_class = serializers.ReconfirmSerializer + + def post(self, request, *args, **kwargs): + serializer = self.get_serializer(data=request.data) + serializer.is_valid(raise_exception=True) + return Response(status=status.HTTP_201_CREATED) + + class ConfirmationEmailView(JWTGenericViewMixin): """View for confirmation email""" From df6b221029ed651568781615df9f28c92afe7a0c Mon Sep 17 00:00:00 2001 From: Kuroshini Date: Tue, 1 Oct 2019 21:32:24 +0300 Subject: [PATCH 3/3] Review fixes --- apps/authorization/serializers/common.py | 17 +++++++++++------ apps/authorization/urls/common.py | 2 +- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/apps/authorization/serializers/common.py b/apps/authorization/serializers/common.py index e19fdae2..07c561f8 100644 --- a/apps/authorization/serializers/common.py +++ b/apps/authorization/serializers/common.py @@ -77,7 +77,6 @@ class SignupSerializer(serializers.ModelSerializer): class ReconfirmSerializer(serializers.ModelSerializer): - email = serializers.EmailField(write_only=True) class Meta: model = account_models.User @@ -85,22 +84,28 @@ class ReconfirmSerializer(serializers.ModelSerializer): def validate_email(self, value): """Validate email""" - if not account_models.User.objects.filter(email=value).filter(email_confirmed=False).exists(): - raise serializers.ValidationError() + users = list(account_models.User.objects.filter(email=value.lower()).all()) + if not users: + raise serializers.ValidationError(detail='User with mentioned email does not exist.') + users = list(filter(lambda user: not user.email_confirmed, users)) + if not users: + raise serializers.ValidationError(detail='User with this email is confirmed.') return value def create(self, validated_data): """Override create method""" queryset = account_models.User.objects.all() - obj = get_object_or_404(queryset, email=validated_data.get('email').lower()) + email = validated_data.get('email').lower() + country_code = self.context.get('request').country_code + obj = get_object_or_404(queryset, email=email) if settings.USE_CELERY: tasks.send_confirm_email.delay( user_id=obj.id, - country_code=self.context.get('request').country_code) + country_code=country_code) else: tasks.send_confirm_email( user_id=obj.id, - country_code=self.context.get('request').country_code) + country_code=country_code) return obj diff --git a/apps/authorization/urls/common.py b/apps/authorization/urls/common.py index 213744d4..814ce836 100644 --- a/apps/authorization/urls/common.py +++ b/apps/authorization/urls/common.py @@ -29,7 +29,7 @@ urlpatterns_oauth2 = [ urlpatterns_jwt = [ path('signup/', views.SignUpView.as_view(), name='signup'), - path('signup/reconfirm', views.ReconfirmView.as_view(), name='signup-reconfirm'), + path('signup/reconfirm/', views.ReconfirmView.as_view(), name='signup-reconfirm'), path('signup/confirm///', views.ConfirmationEmailView.as_view(), name='signup-confirm'), path('login/', views.LoginByUsernameOrEmailView.as_view(), name='login'),