clean_username函数验证失败
问题描述:



相关代码:


form表单
class LoginForm(forms.Form):
'''登录表单'''
username = forms.CharField(label='用户名', max_length=100,
required=False,
help_text='帮助文字',
initial='admin')
password = forms.CharField(label='密码', max_length=200,
min_length=6,
widget=forms.PasswordInput)
def clean_username(self):
'''验证用户名hook钩子函数'''
username = self.cleaned_data['username']
pattern = r'^1[0-9]{10}$'
if not re.search(pattern, username):
raise forms.ValidationError('请输入手机号码',
code='invalid_username',
params=(username, ))
return username
@transaction.atomic
def save(self, commit=False):
# 得到模型的对象,commit=False,并灭有提交到数据
user_obj = super().save(commit)
# 此处还可以进行一些业务逻辑处理
user_obj.save()
# 对其他模型的一个操作
UserProfile.objects.create(user=user_obj, username=user_obj.username)
return user_obj
def clean(self):
data = super().clean()
print(data)
if self.errors:
return
# username = data['username']
# password = data['password']
username = data.get('username', None)
password = data.get('password', None)
if username and password:
# 查询用户名和密码匹配的用户
user_list = User.objects.filter(username=username)
err_list = []
if user_list.count == 0:
# raise forms.ValidationError('用户名不存在')
err_list.append(forms.ValidationError('用户名不存在'))
# 验证密码是否正确
if not user_list.filter(password=password).exists():
# raise forms.ValidationError('密码不正确')
err_list.append(forms.ValidationError('密码不正确'))
if err_list:
raise forms.ValidationError(err_list)7
收起
正在回答
1回答
同学,你好!表单提交是post 方法,如果是post 方法,再判断能否接收成功表单。如果不是post方法那就是get 方法,get方法是接不到表单值的。同学当前是get 方法的操作。所以同学需要用if 判断下是不是post 方法,post方法中继续判断接收成功与接收失败的操作。修改如下:

2、自定义clean_username方法时,raise 表单错误的参数过多,会造成报错的。同学只传个报错提示就可以的

祝学习愉快~
相似问题
登录后可查看更多问答,登录/注册
Python全能工程师
- 参与学习 人
- 提交作业 16416 份
- 解答问题 4469 个
全新版本覆盖5大热门就业方向:Web全栈、爬虫、数据分析、软件测试、人工智能,零基础进击Python全能型工程师,从大厂挑人到我挑大厂,诱人薪资在前方!
了解课程



恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星