Come modulo di registrazione della sottoclasse in Django-Registrazione
-
20-12-2019 - |
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?
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')
.