def save(self, *args, **kwargs): if not self.verification_key: self.verification_key = generate_key(self.user, self.email) return super(EmailChangeRequest, self).save(*args, **kwargs)
def email_change_view(request, extra_context={}, success_url='email_verification_sent', template_name='email_change/email_change_form.html', email_message_template_name='email_change/emails/verification_email_message.html', email_subject_template_name='email_change/emails/verification_email_subject.html'): """Allow a user to change the email address associated with the user account. """ if request.method == 'POST': form = EmailChangeForm(username=request.user.username, data=request.POST, files=request.FILES) if form.is_valid(): EmailChangeRequest = cache.get_model('email_change', 'EmailChangeRequest') email = form.cleaned_data.get('email') verification_key = generate_key(request.user, email) site_name = getattr(settings, 'SITE_NAME', 'Please define settings.SITE_NAME') domain = getattr(settings, 'SITE_URL', None) if domain is None: Site = cache.get_model('sites', 'Site') current_site = Site.objects.get_current() site_name = current_site.name domain = current_site.domain protocol = 'http' if request.is_secure(): protocol = 'https' # First clean all email change requests made by this user qs = EmailChangeRequest.objects.filter(user=request.user) qs.delete() # Create an email change request EmailChangeRequest.objects.create( user = request.user, verification_key = verification_key, email = email ) # Prepare context c = { 'email': email, 'site_domain': domain, 'site_name': site_name, 'user': request.user, 'verification_key': verification_key, 'protocol': protocol, } c.update(extra_context) context = Context(c) # Send success email subject = render_to_string(email_subject_template_name, context_instance=context) message = render_to_string(email_message_template_name, context_instance=context) send_mail(subject, message, None, [email]) # Redirect return redirect(success_url) else: form = EmailChangeForm(username=request.user.username) context = RequestContext(request, extra_context) context['form'] = form return render_to_response(template_name, context_instance=context)