Benutzerdefinierte E -Mail -Validierung im Django -FormularPython

Python-Programme
Anonymous
 Benutzerdefinierte E -Mail -Validierung im Django -Formular

Post by Anonymous »

In meiner Django -Konto -App habe ich ein Modell für Konto < /p>

Code: Select all

class Account(AbstractBaseUser):

wallet_value = models.DecimalField(max_digits=10, decimal_places=2, default=0.00)

first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
username = models.CharField(max_length=100)
email = models.EmailField(max_length=200, unique=True)
phone_number = models.CharField(max_length=20)

"""SOME OTHER REQUIED FIELD"""
date_joined = models.DateTimeField(auto_now_add=True)
last_login = models.DateTimeField(auto_now_add=True)
is_admin = models.BooleanField(default=False)

is_staff = models.BooleanField(default=False)
is_superadmin = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)

USERNAME_FIELD = "email"

REQUIRED_FIELDS = ["first_name", "last_name", "username"]

< /code>
Ich habe auch ein Registrierungsformular, das für die Anmeldungsfunktion verantwortlich ist < /p>
class RegistrationForm(forms.ModelForm):
password = forms.CharField(
widget=forms.PasswordInput(
attrs={
"class": "form-control",
}
)
)

confirm_password = forms.CharField(
widget=forms.PasswordInput(attrs={"class": "form-control"})
)
first_name = forms.CharField(
widget=forms.TextInput(
attrs={
"placeholder": "Enter First Name",
"class": "form-control",
}
)
)

last_name = forms.CharField(
widget=forms.TextInput(
attrs={"placeholder": "Enter Last Name", "class": "form-control"}
)
)
email = forms.CharField(
widget=forms.EmailInput(
attrs={
"placeholder": "Enter Email Adress",
"class": "form-control",
}
)
)

phone_number = forms.CharField(
widget=forms.NumberInput(
attrs={"placeholder": "Enter Phone Number", "class": "form-control"}
)
)

class Meta:
model = Account
fields = [
"first_name",
"last_name",
"email",
"phone_number",
"password",
"confirm_password",
]

def __init__(self, *args, **kwargs):
super(RegistrationForm, self).__init__(*args, **kwargs)

def clean(self):
cleaned_data = super(RegistrationForm, self).clean()
password = cleaned_data.get("password")
confirm_password = cleaned_data.get("confirm_password")
if password != confirm_password:
raise forms.ValidationError(
"password dose not match",
)
< /code>
und in meinen Ansichten.Py, die die Registerverhandlung verwendete. Ich verwende die Validierung des Formulars, damit ich die Felder, wenn es gültig istif form.is_valid():
# get the fields
# create the user in database

< /code>
Jetzt habe ich einen Senario, in dem der Benutzer seine Informationen in Registrierungsformular eingibt, und ein Aktivierungslink wird an seine E -Mail gesendet. Sobald er oder ihre Klicks auf den Aktivierungslink klickt, wird sein Konto aktiviert. Wenn es sich jedoch in der Datenbank befindet, müssen wir wissen, ob die E -Mail aktiviert ist oder nicht. Wenn ja, werden wir einen Fehler ansprechen, dass diese E -Mail in der Datenbank vorhanden ist, also müssen wir jedoch überprüfen, ob der vorherige Aktivierungslink abgelaufen ist oder nicht ... Wenn ja, senden Sie einen weiteren Acitvation -Link und informieren Sie den Benutzer darüber. Wenn nicht, informieren Sie den Benutzer, dass ein Aktivierungslink an seine E -Mail gesendet wurde. Die Algorithm ist so etwas wie dieses.# user click on registration button after fill the fields
if emailIsInDatabase:
if isAcitve:
raise forms.ValidationError("there is an account with this email.  please signin")
else:
if activationLinkIsExpired:
# send another activation link
# inform the user about that
else:
# inform the user to activate his or her link
else:
# send the activation link to the email
< /code>
Jetzt ist die Herausforderung hier.Imagine einen Senario, den ein Benutzer auf der Website mit einer falschen E -Mail (dh für eine andere Person) registriert. Nach dem Klicken auf den Senden versteht er, dass die E -Mail falsch ist und sich bei der richtigen E -Mail registriert. Wenn der andere Benutzer, dass die erste E -Mail für ihn war, ein Konto erstellen möchte), wenn er oder sie mit dieser E -Mail auf Sumbit klickt, da sich diese E -Mail in der Datenbank befindet und es nicht nur gehandelt wird, wird die Formularvalidierung für eindeutiger E -Mail -Wert genannt, und es wird einen Fehler erfassen, dass ein Konto bereits ein Konto gibt, das in dieser E -Mail -IS -IS -. Link.cleaned_data = super(RegistrationForm, self).clean() 

Und sobald ich diesen Teil entfernt habe und einfach die sauberen Daten von selbst wie dieses Cleaned_data = self.cleaned_data verwendete. Einzigartigkeit
Ich habe auch die Funktion Clean_eamil verwendet, um meine eigenen E -Mails speziell zu validieren, aber sie wurde nicht geantwortet, da die saubere Funktion danach aufgerufen wird und meine eigene Validierung nutzlos ist.
Also, was ist die Lösung hier? Danke

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post