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 位密码。谢谢阅读! :)