Вопрос

Could someone please help with reg/auth/auth using class-based generic views? It is clear how to do this with function-based views, but not with classes. Cannot understand the philosophy of CBV when rendering forms.

Это было полезно?

Решение

Why should it be necessarily Class-based if it works well with functional view ?

For registration I used this :

class SignUpFormView(FormView):
    form_class = SignUpForm
    template_name  = 'authentication/registration_form.html'

    def form_valid(self, form):
        """ What to do with the valid form ?
              - Create the user and a default website
              - Send a mail to confirm the email and the account creation

        """

        user = User.objects.create_user(form.cleaned_data['username'], 
                                        form.cleaned_data['email'], 
                                        form.cleaned_data['password'])
        user.is_active = False
        user.save()

        date = user.date_joined.replace(microsecond=0)
        key = hashlib.sha1((u'%s%s%s' % (settings.SECRET_KEY, user.email, date)
                            ).encode('utf-8')).hexdigest()

        subject = _(u'[%s] : Subscription') % settings.SITE_NAME

        mail = render_to_string('authentication/mails/registration_confirmation.html', 
                                { 'titre': subject,
                                  'pseudo': user.username,
                                  'site': settings.SITE_NAME,
                                  'user_id': user.id,
                                  'user_key': key })

        msg = EmailMessage(subject, mail, '%(site)s <%(email)s>' % {
                'site': settings.SITE_NAME, 'email': settings.DEFAULT_FROM_EMAIL
                }, [user.email])

        msg.content_subtype = "html"  # Main content is now text/html
        try:
            msg.send()
        except:
            # In debug we display the url
            print reverse('auth_activation', args=[user.id, key])

        return render_to_response("authentication/check_your_mail.html",
                                  context_instance=RequestContext(self.request))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top