Advertisement
Guest User

Untitled

a guest
Oct 29th, 2016
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.11 KB | None | 0 0
  1. url(r'^login/$', views.Login, name='login'),
  2. url(r'^register/$', views.Register.as_view(), name='register'),
  3. url(r'^reset_password', views.ResetPasswordRequestView.as_view(), name="password_reset"),
  4. url(r'^reset_password_confirm/(?P<uidb64>[0-9A-Za-z]+)-(?P<token>.+)/$', views.PasswordResetConfirmView.as_view(), name='reset_password_confirm'),
  5.  
  6. <form action="" method="post">
  7. {% csrf_token %}
  8. {{ form.as_p }}
  9. <input type="submit" value="Submit"/>
  10. </form>
  11.  
  12. class ResetPasswordRequestView(FormView):
  13. template_name = 'authentication/password_reset.html'
  14. success_url = 'login'
  15. form_class = PasswordResetRequestForm
  16.  
  17. def get(self, request, *args, **kwargs):
  18. form = PasswordResetRequestForm()
  19. return render(request, 'authentication/password_reset.html', {'form': form})
  20.  
  21. def post(self, request, *args, **kwargs):
  22. '''
  23. A normal post request which takes input from field "email" (in ResetPasswordRequestForm).
  24. '''
  25. form = self.form_class(request.POST)
  26. form_email = ''
  27. if form.is_valid():
  28. form_email = form.cleaned_data["email"]
  29. if self.validate_email_address(form_email): # uses the method written above
  30. '''
  31. Verifies that the submited email is valid and gets its asociated user. If it is registered an
  32. email will be sent to that address with the reset link
  33. '''
  34. user = User.objects.get(email=form_email)
  35. if user is not None:
  36. email_template_data = {
  37. 'email': user.email,
  38. 'domain': request.META['HTTP_HOST'],
  39. 'site_name': 'Collector',
  40. 'uid': urlsafe_base64_encode(force_bytes(user.pk)),
  41. 'user': user,
  42. 'token': default_token_generator.make_token(user),
  43. 'protocol': 'http',
  44. }
  45. email_template_name = 'authentication/password_reset_email.html'
  46. subject = 'Password reset on Collector'
  47. email = loader.render_to_string(email_template_name, email_template_data)
  48.  
  49. send_mail(subject, email, DEFAULT_FROM_EMAIL, [user.email], fail_silently=False)
  50. result = self.form_valid(form)
  51. messages.success(request,
  52. 'An email has been sent to ' + form_email + ". Please check its inbox to continue reseting password.")
  53. return result
  54. else:
  55. result = self.form_invalid(form)
  56. messages.error(request, 'No user is associated with this email address')
  57. return result
  58.  
  59. messages.error(request, 'Invalid Input')
  60. return self.form_invalid(form)
  61.  
  62. class PasswordResetConfirmView(FormView):
  63. """
  64. View that checks the hash in a password reset link and presents a
  65. form for entering a new password.
  66. """
  67. template_name = "authentication/password_reset_enter_new.html"
  68. success_url = 'login'
  69. form_class = SetPasswordForm
  70.  
  71. def get(self, request, uidb64=None, token=None, *arg, **kwargs):
  72. form = SetPasswordForm()
  73. return render(request, "authentication/password_reset_enter_new.html", {'form': form})
  74.  
  75. def post(self, request, uidb64=None, token=None, *arg, **kwargs):
  76.  
  77. UserModel = User
  78. form = self.form_class(request.POST)
  79. assert uidb64 is not None and token is not None # checked by URLconf
  80. try:
  81. uid = urlsafe_base64_decode(uidb64)
  82. user = UserModel._default_manager.get(pk=uid)
  83. except (TypeError, ValueError, OverflowError, UserModel.DoesNotExist):
  84. user = None
  85.  
  86. if user is not None and default_token_generator.check_token(user, token):
  87. if form.is_valid():
  88. new_password = form.cleaned_data['new_password']
  89. user.set_password(new_password)
  90. user.save()
  91. messages.success(request, 'Password has been reset.')
  92. return self.form_valid(form)
  93. else:
  94. messages.error(request, 'Password reset has not been unsuccessful.')
  95. return self.form_invalid(form)
  96. else:
  97. messages.error(request, 'The reset password link is no longer valid.')
  98. return self.form_invalid(form)
  99.  
  100. 127.0.0.1:8000/authentication/reset_password_confirm/MQ-4gk-262cd9422172a2e21be1/
  101.  
  102. url(r'^reset_password$', ...)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement