Django:无法执行 Validators 而不是执行 Except 块
Django: Not able to execute Validators instead the Except block execute
我正在尝试使用 Django 中的验证程序进行电子邮件和密码验证。我有自己的自定义注册表。我只是使用名为 'Register' 的视图从中获取电子邮件和密码值。每当我尝试注册新用户时,代码总是运行到 except 块中,我很确定我在 validate_email() 和 validate_password() 上做错了什么。这是我的观点:
def register(request):
if request.method == 'GET':
return render(request, 'index.html')
else:
username = request.POST['username']
email = request.POST['email']
pass1 = request.POST['password1']
pass2 = request.POST['password2']
try:
validate_email(email)
except ValidationError:
return render(request, 'register.html', {'emailErr':'Hmm.. Did you enter a valid email?'})
try:
validate_password(pass1)
validate_password(pass2)
except ValidationError: #This block runs
return render(request, 'register.html', {'passErr':'Please enter a valid password'})
if User.objects.filter(email=email).exists():
return render(request, 'register.html', {'error1':'Email already exists'})
else:
if pass1 == pass2:
try:
user = User.objects.create_user(username=username, password=pass1, email=email)
user.save()
login(request,user)
sendConfirm(user)
return render(request, 'confirm_please.html')
except IntegrityError:
return render(request, 'register.html', {'error2':'User already exists'})
else:
return render(request, 'register.html', {'error3':'Make sure the passwords are same'})
不胜感激
乍一看,您的密码根本没有通过验证。只需将正确的错误传递给用户,而不是:
'Please enter a valid password'
试试这个:
from django.core.exceptions import ValidationError
from django.contrib.auth.password_validation import validate_password
def register(request):
...
try:
validate_password(pass1)
validate_password(pass2)
except ValidationError as err:
return render(request, 'register.html', {'passErr':'; '.join(err.messages)})
...
代码是 运行 正确的,validate_password 是例外,因为它要求输入 8 位密码。谢谢阅读! :)
我正在尝试使用 Django 中的验证程序进行电子邮件和密码验证。我有自己的自定义注册表。我只是使用名为 'Register' 的视图从中获取电子邮件和密码值。每当我尝试注册新用户时,代码总是运行到 except 块中,我很确定我在 validate_email() 和 validate_password() 上做错了什么。这是我的观点:
def register(request):
if request.method == 'GET':
return render(request, 'index.html')
else:
username = request.POST['username']
email = request.POST['email']
pass1 = request.POST['password1']
pass2 = request.POST['password2']
try:
validate_email(email)
except ValidationError:
return render(request, 'register.html', {'emailErr':'Hmm.. Did you enter a valid email?'})
try:
validate_password(pass1)
validate_password(pass2)
except ValidationError: #This block runs
return render(request, 'register.html', {'passErr':'Please enter a valid password'})
if User.objects.filter(email=email).exists():
return render(request, 'register.html', {'error1':'Email already exists'})
else:
if pass1 == pass2:
try:
user = User.objects.create_user(username=username, password=pass1, email=email)
user.save()
login(request,user)
sendConfirm(user)
return render(request, 'confirm_please.html')
except IntegrityError:
return render(request, 'register.html', {'error2':'User already exists'})
else:
return render(request, 'register.html', {'error3':'Make sure the passwords are same'})
不胜感激
乍一看,您的密码根本没有通过验证。只需将正确的错误传递给用户,而不是:
'Please enter a valid password'
试试这个:
from django.core.exceptions import ValidationError
from django.contrib.auth.password_validation import validate_password
def register(request):
...
try:
validate_password(pass1)
validate_password(pass2)
except ValidationError as err:
return render(request, 'register.html', {'passErr':'; '.join(err.messages)})
...
代码是 运行 正确的,validate_password 是例外,因为它要求输入 8 位密码。谢谢阅读! :)