/ / Django: Nie je možné overiť UserCreationForm - python, django, formuláre

Django: Nepodarilo sa overiť UserCreationForm - python, django, formuláre

Nižšie je uvedený obsah mojich formulárov.py

from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth.models import User

class RegistrationForm(UserCreationForm):

email = forms.EmailField(required=True)
first_name = forms.CharField(max_length=20, required=True)
last_name = forms.CharField(max_length=20, required=True)

class Meta:
model = User
fields = ("username", "email", "password1", "password2", "first_name", "last_name")

def save(self, commit=True):
user = super(UserCreationForm, self).save(commit=False)
user.email = self.cleaned_data["email"]
user.first_name = self.cleaned_data["first_name"]
user.last_name = self.cleaned_data["last_name"]
#validation of email id----------
email1 = user.email
(fisrt, second,) = email1.split("@")
(domain, exn,) = second.split(".")
if not domain == "tmail":
raise forms.ValidationError("Domain must be "tmail"")

if commit:
user.save()
return user

Som schopný tlačiť formulár (vrátane e-mailových polí,krstné meno a priezvisko) a zaregistrovať používateľa úspešne iba vydanie Mám, je to, že nevykonáva krok validácie. (kód pod "#validation of email id ----------") Aj keď je doména iná ako „tmail“, akceptuje ju bez toho, aby spôsobila chyby pri validácii a potom zaregistrovala používateľa do databázy. Prosím, pomôžte a dajte mi vedieť, ak potrebujete viac informácií.

odpovede:

1 pre odpoveď č. 1

Na overenie e-mailu v systéme Windows je príliš neskoro save() metóda. Django vám umožňuje overiť jednotlivé polia definovaním metódy clean_<fieldname>, Toto sa zavolá po overení formulára.

def clean_email(self):
email = self.cleaned_data["email"]
(first, second,) = email1.split("@")
(domain, exn,) = second.split(".")
if domain != "tmail":
raise forms.ValidationError("Domain must be "tmail"")
return email

Pozrite si dokumenty čistenie konkrétneho atribútu poľa pre viac informácií.


0 pre odpoveď č. 2

Prečo robíte validáciu s výnimkou? Všetky validácie sa musia uskutočniť pred uložením, takže ak sa vyskytne akákoľvek výnimka, je to pravdepodobne chyba vo vašom kóde. Formy majú špeciálne „čisté“ metódy, najmä na tento účel. Na overenie konkrétneho poľa môžete použiť „clean_ {field_name}“. Aj keď vaša validácia závisí od viacerých polí, musíte použiť „čistú“ metódu.