def register(request, template="users/registration.html"): # FIXME: the following code is too long.. shorten its logic.. # creating a captcha image captcha = create_captcha() if request.method == "POST": # creating a login form instance with post data form = RegistrationForm(request.POST) extra_context = {"form": form, "captcha": captcha} if form.is_valid(): username = form.cleaned_data["username"] password = form.cleaned_data["password"] name = form.cleaned_data["name"] surname = form.cleaned_data["surname"] email = form.cleaned_data["email"] if is_username_unique(username) and is_email_unique(email): # last, control the captcha and continue if it's correct test = lambda x={}, y="": (x.has_key(y) and x[y] != "") or False if test(request.POST, "captcha_id") and test(request.POST, "registration_captcha"): cp = Captcha() cp.text = request.POST["registration_captcha"] # validating captcha pattern = re.compile(u"[^a-zA-Z0-9]") if ( not pattern.search(cp.text) and cp.generate_hash(settings.SECRET_KEY[:20]) == request.POST["captcha_id"] ): # registering the user try: new_user = User.objects.create_user(username, email, password) new_user.first_name = name new_user.last_name = surname # new user will be passive 'til activation occurs new_user.is_active = False new_user.save() # creating a user profile with an activation key new_user.profile.create() # creating activation key profile = new_user.get_profile() profile.activation_key = create_activation_key() profile.save() # all done, now let's send him a mail for activation site = Site.objects.get_current() send_mail( settings.EMAIL_SUBJECT_PREFIX + messages.REGISTER_SUBJECT, messages.REGISTER_BODY % (site.name, site.domain, new_user.username, profile.activation_key, site.name), settings.EMAIL_INFO_ADDRESS_TR, [email], fail_silently=settings.EMAIL_FAIL_SILENCE, auth_user=settings.EMAIL_HOST_USER, auth_password=settings.EMAIL_HOST_PASSWORD, ) # leaving the "anonymous" user a new message.. messages.set_user_message(request, messages.REG_SUCCESS) # redirecting the user to blog return HttpResponseRedirect(reverse(settings.REDIRECT_URL)) except IntegrityError: # there's already a user with that name # normally this part shouldn't be invoked extra_context["error"] = messages.ALREADY_REGISTERED_USER return render_to_response(template, extra_context, context_instance=RequestContext(request)) else: extra_context["error"] = messages.WRONG_CAPTCHA return render_to_response(template, extra_context, context_instance=RequestContext(request)) else: extra_context["error"] = messages.WRONG_CAPTCHA return render_to_response(template, extra_context, context_instance=RequestContext(request)) else: extra_context["error"] = messages.ALREADY_REGISTERED_USER return render_to_response(template, extra_context, context_instance=RequestContext(request)) else: return render_to_response(template, extra_context, context_instance=RequestContext(request)) else: # creating a login form instance form = RegistrationForm() extra_context = {"form": form, "captcha": captcha} return render_to_response(template, extra_context, context_instance=RequestContext(request))