Advertisement
Guest User

Untitled

a guest
Aug 4th, 2016
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.69 KB | None | 0 0
  1. def signup(request, form_class=SignupForm,
  2. template_name="account/signup.html", success_url=None):
  3. if success_url is None:
  4. success_url = get_default_redirect(request)
  5. if request.method == "POST":
  6. form = form_class(request.POST)
  7. if form.is_valid():
  8. username, password = form.save()
  9. if settings.ACCOUNT_EMAIL_VERIFICATION:
  10. return render_to_response("account/verification_sent.html", {
  11. "email": form.cleaned_data["email"],
  12. }, context_instance=RequestContext(request))
  13. else:
  14. user = authenticate(username=username, password=password)
  15. auth_login(request, user)
  16. request.user.message_set.create(
  17. message=_("Successfully logged in as %(username)s.") % {
  18. 'username': user.username
  19. })
  20. return HttpResponseRedirect(success_url)
  21. else:
  22. form = form_class()
  23. return render_to_response(template_name, {
  24. "form": form,
  25. }, context_instance=RequestContext(request))
  26.  
  27. class SignupForm(forms.Form):
  28.  
  29. username = forms.CharField(label=_("Username"), max_length=30, widget=forms.TextInput())
  30. password1 = forms.CharField(label=_("Password"), widget=forms.PasswordInput(render_value=False))
  31. password2 = forms.CharField(label=_("Password (again)"), widget=forms.PasswordInput(render_value=False))
  32.  
  33. if settings.ACCOUNT_REQUIRED_EMAIL or settings.ACCOUNT_EMAIL_VERIFICATION:
  34. email = forms.EmailField(
  35. label = _("Email"),
  36. required = True,
  37. widget = forms.TextInput()
  38. )
  39. else:
  40. email = forms.EmailField(
  41. label = _("Email (optional)"),
  42. required = False,
  43. widget = forms.TextInput()
  44. )
  45.  
  46. confirmation_key = forms.CharField(max_length=40, required=False, widget=forms.HiddenInput())
  47.  
  48. def clean_username(self):
  49. if not alnum_re.search(self.cleaned_data["username"]):
  50. raise forms.ValidationError(_("Usernames can only contain letters, numbers and underscores."))
  51. try:
  52. user = User.objects.get(username__iexact=self.cleaned_data["username"])
  53. except User.DoesNotExist:
  54. return self.cleaned_data["username"]
  55. raise forms.ValidationError(_("This username is already taken. Please choose another."))
  56.  
  57. def clean(self):
  58. if "password1" in self.cleaned_data and "password2" in self.cleaned_data:
  59. if self.cleaned_data["password1"] != self.cleaned_data["password2"]:
  60. raise forms.ValidationError(_("You must type the same password each time."))
  61. return self.cleaned_data
  62.  
  63. def save(self):
  64. username = self.cleaned_data["username"]
  65. email = self.cleaned_data["email"]
  66. password = self.cleaned_data["password1"]
  67.  
  68. if self.cleaned_data["confirmation_key"]:
  69. from friends.models import JoinInvitation # @@@ temporary fix for issue 93
  70. try:
  71. join_invitation = JoinInvitation.objects.get(confirmation_key = self.cleaned_data["confirmation_key"])
  72. confirmed = True
  73. except JoinInvitation.DoesNotExist:
  74. confirmed = False
  75. else:
  76. confirmed = False
  77.  
  78. # @@@ clean up some of the repetition below -- DRY!
  79.  
  80. if confirmed:
  81. if email == join_invitation.contact.email:
  82. new_user = User.objects.create_user(username, email, password)
  83. join_invitation.accept(new_user) # should go before creation of EmailAddress below
  84. new_user.message_set.create(message=ugettext(u"Your email address has already been verified"))
  85. # already verified so can just create
  86. EmailAddress(user=new_user, email=email, verified=True, primary=True).save()
  87. else:
  88. new_user = User.objects.create_user(username, "", password)
  89. join_invitation.accept(new_user) # should go before creation of EmailAddress below
  90. if email:
  91. new_user.message_set.create(message=ugettext(u"Confirmation email sent to %(email)s") % {'email': email})
  92. EmailAddress.objects.add_email(new_user, email)
  93. else:
  94. new_user = User.objects.create_user(username, "", password)
  95. if email:
  96. new_user.message_set.create(message=ugettext(u"Confirmation email sent to %(email)s") % {'email': email})
  97. EmailAddress.objects.add_email(new_user, email)
  98.  
  99. if settings.ACCOUNT_EMAIL_VERIFICATION:
  100. new_user.is_active = False
  101. new_user.save()
  102.  
  103. return username, password # required for authenticate()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement