博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django基础知识~forms钩子
阅读量:6963 次
发布时间:2019-06-27

本文共 1200 字,大约阅读时间需要 4 分钟。

一 简介 我们来聊聊如何构建forms的钩子

二 目的 实现自定义的验证机制,从而进行处理
三 分类:
    1 局部钩子 clean_column() 当字段校验完毕后,再进行查找是否有以clean_开头的函数名,如果有,就调用该函数
    2 全局钩子 clean() 其原理是对校验完毕的字段,再进行字段间的校验。当字段校验完毕,查找是否有clean的函数,如果有就运行该函数 
    执行顺序 局部钩子 全局钩子
三 基本语法
    from django.core.exceptions import ValidationError,NON_FIELD_ERRORS
    delf clean_column(self):
    value=self.cleaned_data.get('key')
    if true:
    return value 
    else: 
   raise ValidationError()

四 重写clean()方法

    clean()方法预定义没处理流程,只返回cleaned_data
五 注意
   1 单个字段只能指定单个方法
   2 钩子是按照顺序执行的,如果上面的不过,直接抛出异常了.不会执行下面的钩子
   3 clean()的优先级最高
六 场景示例
   1 存在用户就不允许再插入(局部钩子)
     def clean_user(self):
       user1=self.cleaned_data.get("user")
        val=User.objects.filter(user=user1)
      if not val:
         return val
     else:
         raise ValidationError("用户名已存在")
        错误根据{
{field.errors}} 即可显示
   2 密码和二次密码输入的确认(全局钩子)
      def clean(self):
        pwd=self.cleaned_data.get("password")
        pwd1=self.cleaned_data.get("password_1")
        if pwd==pwd1:
          return self.cleaned_data
        else:
           raise ValidationError("两次密码不一致")
        views函数
           g_error=form.errors.get("__all__")#通过这种方式取得全局钩子报错信息 
        前端
          {% if filed.label == "确认密码" %}
          {
{ g_error }}
          {% endif %}

 七 小补充

    对于多余的字段不存入库,可以采用字典删除的方式入库

     forms.cleaned_data.pop("column")

     models.object.create(** forms.cleaned_data)

转载于:https://www.cnblogs.com/danhuangpai/p/10984840.html

你可能感兴趣的文章
# python模拟各大网站登陆方式, 包括爬虫--你们要的全都有
查看>>
Mockito.mock() vs @Mock vs @MockBean
查看>>
iOS栈区 堆区等概念以及区别
查看>>
Webpack HMR 原理解析
查看>>
如何发现及替换不合适的索引
查看>>
Node之文件系统fs(fileSystem)
查看>>
一文带您了解GMQ Token
查看>>
有愚人节活动?微软营销长备忘录:不要惨与
查看>>
图文详解 Java 字节码,让你秒懂全过程。
查看>>
使用腾讯乐固加固安卓APK
查看>>
为什么程序员应该有一台 Mac 个人电脑
查看>>
iOS 开发中 runtime 常用的几种方法
查看>>
JS执行机制(浏览器事件环 vs Node事件环)
查看>>
树形数据结构总结一(堆,Trie,并查集)
查看>>
企业上云的四个阶段
查看>>
九、 一个简单的播放器(各自同步)
查看>>
一步一图,带你了解分布式架构的前世今生!
查看>>
转行程序员深漂的这三年 #3
查看>>
[转载]责任链模式
查看>>
揭秘!双11万亿流量下的分布式缓存系统 Tair
查看>>