这里的clean_field()和clean()两个函数运行机制是什么,views里面并没有调用啊?
P-1>浏览器POST请求
P-2>URL控制
P-3>Views层函数运行
P-4>实例化一个带参数的表单对象Form(request.POST)
P-5>进入Form模型,获取一个form对象,此时不运行验证函数?
P-6>回到Views层(见图中第1&2出打印结果)
P-7>运行clean_field()和clean()两个函数,(见图中第3&4打印结果)
P-8>绑定好数据,并且未报错,form.is_valid()。验证通过,图中5&6.
P-9>将表单对象传入html,并在浏览器中展示
问1-1:根据打印结果,实例化表单对象,没有触发clean()的运行,否则3&4的打印结果应该在1&2前面?
问2-2:视图层函数中,并未调用clean()两个函数,这两个函数如何在1&2结果打印后,自动运行?
问3-3:只有带clean关键字的函数才会被系统自动执行?其他函数需要调用?
问4-4:clean()和clean_field()两个函数的返回值有何用处?我直接注释,不影响运行结果啊?
正在回答 回答被采纳积分+1
同学,你好。
1、form = UserLoginForm(request.POST):只是实例化表单对象,并没有输出结果,因此会继续往下执行,输出1,2中的内容
2、使用is_valid()方法可以验证用户提交的数据是否合法,如果表单没有错误,则返回true。
3、clean_[字段]这种写法会在form.is_valid()方法中调用,对单个字段的数据进行验证清洗。
4、若clean_username中没有return username时,在clean()的cleaned_data中的username值为None。clean方法重写时一定不要忘了return cleaned_data,这样重写可以使用户提交的数据在form类中执行检测完后返回数据给用户,数据合法后进行逻辑处理。
在本案例的目前阶段注释掉是没有影响的,但还是建议同学将username和cleaned_data进行返回
如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~
- 参与学习 人
- 提交作业 218 份
- 解答问题 3562 个
本阶段带你用Python开发一个网站,学习主流框架Django+Flask是Python Web开发的第一步,在基础知识上实现积分商城的项目开发,体验真实的项目开发流程,提高解决编程问题和效率的能力。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星