首页 > 其他分享 >[django]钩子函数的一些细节(clean)

[django]钩子函数的一些细节(clean)

时间:2023-02-17 10:45:53浏览次数:40  
标签:confirm 钩子 self 校验 django clean password data

函数名

说明clean_后面跟着的是需要校验字段名称
示例

class RelUserReset(forms.ModelForm):
  def clean_confirm_password(self):
    pass

校验顺序

说明:如果是继承的是Form对象,校验顺序就是字段在表单中的定义顺序。如果是继承的是ModelForm对象,校验顺序就是class Metafileds列表的顺序。

关于clean_data

说明:clean_data 里面装的是已经经过验证的字段。clean_data是一个字典。
错误示例

class RelUserReset(forms.ModelForm):
    class Meta:
        model = UserInfo
        fields = ["password","confirm_password"]
    #定义钩子函数
    def clean_password(self):
        psw = self.cleaned_data.get("password")
        #报错点
        confirm = self.cleaned_data.get("confirm_password")
        if confirm != psw:
            raise ValidationError("密码不一致")
        return confirm

这里的代码块有点多,请耐心阅读
先关注函数名clean_password,由于表单验证是有顺序的,并且在fields列表里面confirm_passwordpassword之后,所以此时的confirm_password是没有经过校验的,也就是说cleaned_data里面还没有存在confirm_password的值,所以所有会出现报错。

解决方法:把钩子的函数名改成clean_confirm_password

标签:confirm,钩子,self,校验,django,clean,password,data
From: https://www.cnblogs.com/Rev-RoastDuck/p/17129304.html

相关文章

  • ChatGPT:用delphi写一个键盘鼠标的全局钩子dll示例
    libraryGlobalHooks;usesWindows;{$R*.res}constWH_KEYBOARD_LL=13;WH_MOUSE_LL=14;typeTKeyboardHook=recordHook:HHOOK;Callba......
  • Django操作redis
    一、环境安装基本环境:Python环境:Python3.8.16Django环境:4.1redis环境:参考搭建https://www.cnblogs.com/yclh/p/14742336.html并且已经添加了myApp的应用 安装red......
  • Django操作mongo数据库二(MongoClient方式)
    一、基本环境1、开发环境:Python环境:Python3.8.16Django环境:4.12、需要安装的包pipinstallpymongopipinstallmongoengine二、开发参数配置1、先创建一个mongoA......
  • Django操作mongo数据库一(配置文件里写连接信息)
    一、基本环境1、开发环境:Python环境:Python3.8.16Django环境:4.12、需要安装的包pipinstallpymongopipinstallmongoengine  二、开发参数配置1、先创建一个......
  • Django项目创建(一)
    一、创建django项目1、pycharm工具创建这种方式django会是默认最新版本的 2、命令行创建(1)创建新的开发环境condacreate--namepython3.8testpython=3.8(2)激活开......
  • Django项目创建应用(二)
    四、创建应用一个项目里可以创建多个应用,每个应用进行一种业务处理(1)激活当前项目的环境D:\pythonProject2023\djangoProject>activatepython3.8forDjango (python3.......
  • 对服务器进行心跳检测 python django
    (由于春节期间连不上服务器,但又不知道是不是服务器关机了,因此写一个心跳检测功能遇到问题时可以排查部分原因)具体来说分为客户端和服务端,客户端为校园服务器,服务端为我们自......
  • django admin 字段设置
    来源:http://xieboke.net/article/100/djangoadmin后台里有些输入框长度、宽度、提示语等,可能不满足我们的需求,这个时候,我们就需要对admin的样式进行更改。还是先从d......
  • Python+Django(4):创建其他网页(模板继承)
    模板继承:1,修改主页父模板:抽取通用元素,在index.html同级目录下新建base.html<p><ahref="{%url'learning_logs:index'%}">LearningLog</a></p>{%blockcont......
  • Django——报错信息
    安装报错:报错信息:ValueError:nosignaturefoundforbuiltin<built-infunctionopenssl_md5>解决方法:这个上面写的是MD5错误,但不是这个样子,只是因为运行的配置......