Domanda

Desidero che l'utente accettasse un TOS e supportare anche le e-mail uniche.Django-Registrazione ha due diversi moduli di registrazione subclassati che fa: RegistrationFormTermsOfService e RegistrationFormUniqueEmail.

Devo creare la mia subblass di registrazione e quindi fornire sia quelle funzionalità?Se è così, come sarebbe stato compiuto?Il modulo di registrazione dovrebbe vivere all'interno delle forme della mia app.PY o da qualche altra parte?

È stato utile?

Soluzione

un rapido sguardo al sorgente Per le due classi mostrano:

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']
.

Come puoi vedere queste due classi non sovrascrivere i metodi definiti dall'altro, quindi dovresti essere in grado di definire solo la tua classe come:

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

E dovrebbe funzionare, tuttavia non ho testato questo.Per quanto riguarda dove posizionare questa classe;forms.py è una buona posizione.

Aggiornamento:

Un po 'di lettura a https://django-registration.readthedocs.org/en / ultime / viste.html che ci dice che possiamo trasmettere la vista alcuni parametri tramite la definizione dell'URL;ad esempio una classe di forma. Basta usare un URL come:

url(r'^register/$',
    RegistrationView.as_view(form_class=RegistrationFormTOSAndEmail), 
    name='registration_register')
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top