Skip to content

Commit e8708fb

Browse files
committed
Issue #45: Customize e-mail registration
* Added `REGISTER_EMAIL_SERIALIZER_CLASS` setting key
1 parent 7373571 commit e8708fb

File tree

3 files changed

+34
-8
lines changed

3 files changed

+34
-8
lines changed

rest_registration/api/serializers.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,19 @@ def get_authenticated_user(self):
3333
data['login'], data['password'])
3434

3535

36+
class DefaultRegisterEmailSerializer(serializers.Serializer):
37+
"""
38+
Default serializer used for e-mail registration (e-mail change).
39+
"""
40+
email = serializers.EmailField(required=True)
41+
42+
def get_email(self):
43+
"""
44+
Return user email.
45+
"""
46+
return self.validated_data['email']
47+
48+
3649
class DefaultUserProfileSerializer(serializers.ModelSerializer):
3750
"""
3851
Default serializer used for user profile. It will use these:

rest_registration/api/views/register_email.py

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
from rest_framework.decorators import api_view, permission_classes
44
from rest_framework.permissions import AllowAny, IsAuthenticated
55

6-
from rest_registration.decorators import api_view_serializer_class
6+
from rest_registration.decorators import (
7+
api_view_serializer_class,
8+
api_view_serializer_class_getter
9+
)
710
from rest_registration.notifications import send_verification_notification
811
from rest_registration.settings import registration_settings
912
from rest_registration.utils.responses import get_ok_response
@@ -23,11 +26,8 @@ def get_valid_period(self):
2326
return registration_settings.REGISTER_EMAIL_VERIFICATION_PERIOD
2427

2528

26-
class RegisterEmailSerializer(serializers.Serializer):
27-
email = serializers.EmailField(required=True)
28-
29-
30-
@api_view_serializer_class(RegisterEmailSerializer)
29+
@api_view_serializer_class_getter(
30+
lambda: registration_settings.REGISTER_EMAIL_SERIALIZER_CLASS)
3131
@api_view(['POST'])
3232
@permission_classes([IsAuthenticated])
3333
def register_email(request):
@@ -36,10 +36,11 @@ def register_email(request):
3636
'''
3737
user = request.user
3838

39-
serializer = RegisterEmailSerializer(data=request.data)
39+
serializer_class = registration_settings.REGISTER_EMAIL_SERIALIZER_CLASS
40+
serializer = serializer_class(data=request.data)
4041
serializer.is_valid(raise_exception=True)
4142

42-
email = serializer.validated_data['email']
43+
email = serializer.get_email()
4344

4445
template_config = (
4546
registration_settings.REGISTER_EMAIL_VERIFICATION_EMAIL_TEMPLATES)

rest_registration/settings_fields.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,18 @@ def __new__(cls, name, *, default=None, help=None, import_string=False):
163163
),
164164
]
165165
REGISTER_EMAIL_SETTINGS_FIELDS = [
166+
Field(
167+
'REGISTER_EMAIL_SERIALIZER_CLASS',
168+
default='rest_registration.api.serializers.DefaultRegisterEmailSerializer', # noqa: E501
169+
import_string=True,
170+
help=dedent("""\
171+
The serializer used by :ref:`register-email-view` endpoint.
172+
It is used to validate the input data and obtain new e-mail.
173+
You can use your custom serializer
174+
to customise validation logic. Please remember that it should
175+
implement ``get_email`` method.
176+
"""),
177+
),
166178
Field('REGISTER_EMAIL_VERIFICATION_ENABLED', default=True),
167179
Field(
168180
'REGISTER_EMAIL_VERIFICATION_PERIOD',

0 commit comments

Comments
 (0)