forms.py
class Log(forms.Form):
username=forms.RegexField('^[^\\/!@#$%^&*<>()+\'\"\n\v\t]+$',min_length=4,error_messages={"invalid": "不能含有特殊字符,例如\'\\\"?等"},
widget=widgets.TextInput(attrs={"class": "form-control",'placeholder':'User'}))
password=forms.CharField(min_length=6,validators=[validators.validate_slug],error_messages={"invalid": "密码由字母、数字、下划线或者横线组成"},
widget=widgets.PasswordInput(attrs={"class": "form-control",'placeholder':'Password'}))
def clean(self):
cleaned_data = super().clean()
username=cleaned_data.get('username')
try:
user=User.objects.get(uname=username)
pwd=cleaned_data.get('password')
if not check_password(pwd,user.upassword):
raise ValidationError('密码错误')
except :
raise ValidationError('不存在此用户')
用户名不存在和密码错误都显示不存在此用户,后来改了一行代码,问题解决了。
class Log(forms.Form):
username=forms.RegexField('^[^\\/!@#$%^&*<>()+\'\"\n\v\t]+$',min_length=4,error_messages={"invalid": "不能含有特殊字符,例如\'\\\"?等"},
widget=widgets.TextInput(attrs={"class": "form-control",'placeholder':'User'}))
password=forms.CharField(min_length=6,validators=[validators.validate_slug],error_messages={"invalid": "密码由字母、数字、下划线或者横线组成"},
widget=widgets.PasswordInput(attrs={"class": "form-control",'placeholder':'Password'}))
def clean(self):
cleaned_data = super().clean()
username=cleaned_data.get('username')
try:
user=User.objects.get(uname=username)
pwd=cleaned_data.get('password')
if not check_password(pwd,user.upassword):
raise ValidationError('密码错误')
except User.DoesNotExist:#不加User.DoesNotExist这个异常名,如果用户存在,但密码错误的话总是会返回'不存在此用户',因为raise ValidationError('密码错误')抛出错误,又会被except捕获
raise ValidationError('不存在此用户')
以前习惯了直接写except:,不写异常名,结果造成了这个错误,浪费了我半小时找错误