这里的clean_field()和clean()两个函数运行机制是什么,views里面并没有调用啊?

这里的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()两个函数的返回值有何用处?我直接注释,不影响运行结果啊?

http://img1.sycdn.imooc.com//climg/5dd10e0309bbe5f310080829.jpg

http://img1.sycdn.imooc.com//climg/5dd10e6e09e2a70010110851.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
提问者 lin丶林 2019-11-18 20:38:02
  • 同学,你好。在执行form = UserLoginForm(request.POST)时,会对得到的form表单中的内容进行验证,调用form.is_valid()方法会将UserLoginForm()中的方法提前执行从而得到cleaned_data数据。验证后的数据保存在返回的cleaned_data中。祝学习愉快~~~~
    2019-11-19 09:51:21
好帮手慕美 2019-11-18 11:42:51

同学,你好。

1、form = UserLoginForm(request.POST):只是实例化表单对象,并没有输出结果,因此会继续往下执行,输出1,2中的内容

http://img1.sycdn.imooc.com//climg/5dd20954096ce67604940137.jpg

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进行返回

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~~

  • 提问者 lin丶林 #1
    关于2&3问:老师说错了吧。。。我把form.is_valid()注释掉,clean_field()函数还是自动运行了啊。。见回答中的截图
    2019-11-18 20:37:45
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.从网页搭建入门Python Web
  • 参与学习           人
  • 提交作业       218    份
  • 解答问题       3562    个

本阶段带你用Python开发一个网站,学习主流框架Django+Flask是Python Web开发的第一步,在基础知识上实现积分商城的项目开发,体验真实的项目开发流程,提高解决编程问题和效率的能力。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师