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全能工程师
- 参与学习 人
- 提交作业 16233 份
- 解答问题 4470 个
全新版本覆盖5大热门就业方向:Web全栈、爬虫、数据分析、软件测试、人工智能,零基础进击Python全能型工程师,从大厂挑人到我挑大厂,诱人薪资在前方!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星