Pergunta

Desejo que o usuário concorde com os Termos de Serviço e também ofereça suporte a e-mails exclusivos.django-registration possui dois formulários de registro de subclasses diferentes que fazem isso: RegistrationFormTermsOfService e RegistrationFormUniqueEmail.

Preciso criar minha própria subclasse de RegistrationForm e fornecer esses dois recursos?Se sim, como isso seria realizado?O formulário de registro ficaria dentro do forms.py do meu aplicativo ou em outro lugar?

Foi útil?

Solução

Uma rápida olhada no fonte para as duas aulas mostra:

class RegistrationFormTermsOfService(RegistrationForm):
    """
    Subclass of ``RegistrationForm`` which adds a required checkbox
    for agreeing to a site's Terms of Service.

    """
    tos = forms.BooleanField(widget=forms.CheckboxInput,
                             label=_(u'I have read and agree to the Terms of Service'),
                             error_messages={'required': _("You must agree to the terms to register")})


class RegistrationFormUniqueEmail(RegistrationForm):
    """
    Subclass of ``RegistrationForm`` which enforces uniqueness of
    email addresses.

    """
    def clean_email(self):
        """
        Validate that the supplied email address is unique for the
        site.

        """
        if User.objects.filter(email__iexact=self.cleaned_data['email']):
            raise forms.ValidationError(_("This email address is already in use. Please supply a different email address."))
        return self.cleaned_data['email']

Como você pode ver, essas duas classes não substituem os métodos definidos pela outra, então você deve ser capaz de definir sua própria classe como sendo:

from registration.forms import RegistrationFormUniqueEmail, RegistrationFormTermsOfService
class RegistrationFormTOSAndEmail(RegistrationFormUniqueEmail, RegistrationFormTermsOfService):
    pass

E deve funcionar, porém não testei isso.Quanto a onde colocar esta aula; forms.py é uma boa localização.

Atualizar:

Uma pequena leitura em https://django-registration.readthedocs.org/en/latest/views.html o que nos diz que podemos passar alguns parâmetros para a visualização por meio da definição de URL;por exemplo, uma classe de formulário.Basta usar um URL como:

url(r'^register/$',
    RegistrationView.as_view(form_class=RegistrationFormTOSAndEmail), 
    name='registration_register')
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top