django基础知识~forms钩子

一 简介 我们来聊聊如何构建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 %}

猜你喜欢

转载自www.cnblogs.com/danhuangpai/p/10984840.html
今日推荐