Проверьте, существует ли уже электронная почта в базе данных
В моем приложении django account я хочу проверить, существует ли введенный email в базе данных (основной django db.sqlite3).
forms.py:
from django import forms
from django.contrib.auth.models import User
class UserRegistrationForm(forms.ModelForm):
password = forms.CharField(label='Hasło', widget=forms.PasswordInput)
password2 = forms.CharField(label='Powtórz hasło', widget=forms.PasswordInput)
class Meta:
model = User
fields = ('username', 'first_name', 'email')
def clean_password2(self):
cd = self.cleaned_data
if cd['password'] != cd['password2']:
raise forms.ValidationError('Hasła nie są identyczne.')
return cd['password2']
views.py:
def register(request):
if request.method == "POST":
user_form = UserRegistrationForm(request.POST)
if user_form.is_valid():
# Creating new user object, without saving in database
new_user = user_form.save(commit=False)
# Setting new password
new_user.set_password(
user_form.cleaned_data['password'])
# Saving user object
new_user.save()
return render(request,
'account/register_done.html',
{'new_user': new_user})
else:
user_form = UserRegistrationForm()
return render(request,
'account/register.html',
{'user_form': user_form})
Теперь, когда я ввожу тот же email для другого пользователя, форма создает этого пользователя.
Я думаю, возможно ли сделать это таким образом? 1). сделать email такой же переменной, как пароль и пароль2 2). удалить email из meta 3). создать метод clean_email() с проверкой, существует ли email в db, если нет, то выдать ошибку
Я не знаю, как добраться до электронной почты в базе данных
Спасибо за помощь!
is_valid():in your
views.py` делают это
if user_form.is_valid():
new_user = user_form.save(commit=False)
email=user_form.cleaned_data['email']
if not User.objects.filter(email=email).exists():
//the rest of your code
else:
//some error message
Это гарантирует, что новый пользователь будет создан, только если он еще не существует.
Если вы работаете над приложением, которое требует имя пользователя, email и пароль длиной x (в данном случае 8), то сделайте следующее.
if not User.objects.filter(username=username).exists():
if not User.objects.filter(email=email).exists():
if len(password) < 8:
// some error message alert
return('register') // the same page
//continue with the rest of your code
.....
return ('login-page')
return('register') the same page
Если это решит вашу проблему, пожалуйста, не забудьте принять это как правильный ответ.