Skip to content

Commit

Permalink
Issue #57: Pass request in serializer context in all views
Browse files Browse the repository at this point in the history
  • Loading branch information
apragacz committed Jun 25, 2019
1 parent df624b7 commit dd7a2a5
Show file tree
Hide file tree
Showing 6 changed files with 60 additions and 18 deletions.
6 changes: 4 additions & 2 deletions rest_registration/api/views/change_password.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,10 @@ def change_password(request):
'''
Change the user password.
'''
serializer = ChangePasswordSerializer(data=request.data,
context={'request': request})
serializer = ChangePasswordSerializer(
data=request.data,
context={'request': request},
)
serializer.is_valid(raise_exception=True)

user = request.user
Expand Down
10 changes: 8 additions & 2 deletions rest_registration/api/views/login.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,10 @@ def login(request):
Logs in the user via given login and password.
'''
serializer_class = registration_settings.LOGIN_SERIALIZER_CLASS
serializer = serializer_class(data=request.data)
serializer = serializer_class(
data=request.data,
context={'request': request},
)
serializer.is_valid(raise_exception=True)
user = serializer.get_authenticated_user()

Expand All @@ -52,7 +55,10 @@ def logout(request):
authenticated.
'''
user = request.user
serializer = LogoutSerializer(data=request.data)
serializer = LogoutSerializer(
data=request.data,
context={'request': request},
)
serializer.is_valid(raise_exception=True)
data = serializer.validated_data

Expand Down
6 changes: 5 additions & 1 deletion rest_registration/api/views/profile.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,14 @@ def profile(request):
instance=request.user,
data=request.data,
partial=partial,
context={'request': request},
)
serializer.is_valid(raise_exception=True)
serializer.save()
else: # request.method == 'GET':
serializer = serializer_class(instance=request.user)
serializer = serializer_class(
instance=request.user,
context={'request': request},
)

return Response(serializer.data)
22 changes: 17 additions & 5 deletions rest_registration/api/views/register.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,10 @@ def register(request):
Register new user.
'''
serializer_class = registration_settings.REGISTER_SERIALIZER_CLASS
serializer = serializer_class(data=request.data)
serializer = serializer_class(
data=request.data,
context={'request': request},
)
serializer.is_valid(raise_exception=True)

kwargs = {}
Expand All @@ -78,7 +81,10 @@ def register(request):

signals.user_registered.send(sender=None, user=user, request=request)
output_serializer_class = registration_settings.REGISTER_OUTPUT_SERIALIZER_CLASS # noqa: E501
output_serializer = output_serializer_class(instance=user)
output_serializer = output_serializer_class(
instance=user,
context={'request': request},
)
user_data = output_serializer.data

if registration_settings.REGISTER_VERIFICATION_ENABLED:
Expand All @@ -105,18 +111,24 @@ def verify_registration(request):
"""
Verify registration via signature.
"""
user = process_verify_registration_data(request.data)
user = process_verify_registration_data(
request.data, serializer_context={'request': request})
signals.user_activated.send(sender=None, user=user, request=request)
extra_data = None
if registration_settings.REGISTER_VERIFICATION_AUTO_LOGIN:
extra_data = perform_login(request, user)
return get_ok_response('User verified successfully', extra_data=extra_data)


def process_verify_registration_data(input_data):
def process_verify_registration_data(input_data, serializer_context=None):
if serializer_context is None:
serializer_context = {}
if not registration_settings.REGISTER_VERIFICATION_ENABLED:
raise Http404()
serializer = VerifyRegistrationSerializer(data=input_data)
serializer = VerifyRegistrationSerializer(
data=input_data,
context=serializer_context,
)
serializer.is_valid(raise_exception=True)

data = serializer.validated_data
Expand Down
17 changes: 13 additions & 4 deletions rest_registration/api/views/register_email.py
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,10 @@ def register_email(request):
user = request.user

serializer_class = registration_settings.REGISTER_EMAIL_SERIALIZER_CLASS
serializer = serializer_class(data=request.data)
serializer = serializer_class(
data=request.data,
context={'request': request},
)
serializer.is_valid(raise_exception=True)

email = serializer.get_email()
Expand Down Expand Up @@ -77,14 +80,20 @@ def verify_email(request):
'''
Verify email via signature.
'''
process_verify_email_data(request.data)
process_verify_email_data(
request.data, serializer_context={'request': request})
return get_ok_response('Email verified successfully')


def process_verify_email_data(input_data):
def process_verify_email_data(input_data, serializer_context=None):
if serializer_context is None:
serializer_context = {}
if not registration_settings.REGISTER_EMAIL_VERIFICATION_ENABLED:
raise Http404()
serializer = VerifyEmailSerializer(data=input_data)
serializer = VerifyEmailSerializer(
data=input_data,
context=serializer_context,
)
serializer.is_valid(raise_exception=True)

data = serializer.validated_data
Expand Down
17 changes: 13 additions & 4 deletions rest_registration/api/views/reset_password.py
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,10 @@ def send_reset_password_link(request):
if not registration_settings.RESET_PASSWORD_VERIFICATION_ENABLED:
raise Http404()
serializer_class = registration_settings.SEND_RESET_PASSWORD_LINK_SERIALIZER_CLASS # noqa: E501
serializer = serializer_class(data=request.data)
serializer = serializer_class(
data=request.data,
context={'request': request},
)
serializer.is_valid(raise_exception=True)
user = serializer.get_user_or_none()
if not user:
Expand Down Expand Up @@ -88,14 +91,20 @@ def reset_password(request):
'''
Reset password, given the signature and timestamp from the link.
'''
process_reset_password_data(request.data)
process_reset_password_data(
request.data, serializer_context={'request': request})
return get_ok_response('Reset password successful')


def process_reset_password_data(input_data):
def process_reset_password_data(input_data, serializer_context=None):
if serializer_context is None:
serializer_context = {}
if not registration_settings.RESET_PASSWORD_VERIFICATION_ENABLED:
raise Http404()
serializer = ResetPasswordSerializer(data=input_data)
serializer = ResetPasswordSerializer(
data=input_data,
context=serializer_context,
)
serializer.is_valid(raise_exception=True)

data = serializer.validated_data.copy()
Expand Down

0 comments on commit dd7a2a5

Please sign in to comment.