Код: Выделить всё
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"]
Код: Выделить всё
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",
)
Код: Выделить всё
if form.is_valid():
# get the fields
# create the user in database
поэтому каждый раз, когда адрес электронной почты вводится в регистрационную форму, мне приходится проверять, есть ли этот адрес электронной почты в базе данных или нет.
если его нет в базе данных, создайте этого пользователя и отправьте активацию ссылку на это электронное письмо, но если оно есть в базе данных, мы должны знать, активировано это электронное письмо или нет. если да, мы выдадим ошибку о том, что этот адрес электронной почты существует в базе данных, поэтому войдите в систему, но если нет, мы должны проверить, истек ли срок действия предыдущей ссылки активации или нет... если да, отправьте еще одну ссылку активации и сообщите пользователю об этом. это, а если нет, просто сообщите пользователю, что на его электронную почту была отправлена ссылка для активации и он должен ее активировать. Алгоритм примерно такой
Код: Выделить всё
# 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
Я уже пытался найти конкретную проверку электронной почты в форме и только что закончил эту часть в чистой функции в форме:
Код: Выделить всё
cleaned_data = super(RegistrationForm, self).clean() поэтому я ищу способ просто удалить проверку уникальности электронной почты
Я также использовал функцию clean_eamil для самостоятельной проверки электронной почты, но она не ответила, потому что после этого будет вызвана функция очистки, и моя собственная проверка бесполезна.
так в чем же здесь решение? Спасибо
Подробнее здесь: https://stackoverflow.com/questions/787 ... jango-form