Form组件钩子自定义验证

django预留的钩子方法:

def _clean_fields(self):    for name, field in self.fields.items():        # value_from_datadict() gets the data from the data dictionaries.        # Each widget type knows how to retrieve its own data, because some        # widgets split data over several HTML fields.        if field.disabled:            value = self.get_initial_for_field(field, name)        else:            value = field.widget.value_from_datadict(self.data, self.files, self.add_prefix(name))        try:            if isinstance(field, FileField):                initial = self.get_initial_for_field(field, name)                value = field.clean(value, initial)            else:                value = field.clean(value)            self.cleaned_data[name] = value            if hasattr(self, ‘clean_%s‘ % name):                value = getattr(self, ‘clean_%s‘ % name)()                self.cleaned_data[name] = value        except ValidationError as e:            self.add_error(name, e)

自定义钩子方法:

针对一个字段做验证的时候使用clean_%s自定义验证

def clean_username(self):    username = self.cleaned_data.get("username")    username_exist = models.UserInfo.objects.filter(username=username)    if username_exist:        self.add_error("username",ValidationError("用户名已存在"))

def clean_phone(self):    phone = self.cleaned_data.get(‘phone‘)    phone_exist = models.UserInfo.objects.filter(phone=phone)    if phone_exist:        self.add_error(‘phone‘, ValidationError("手机号码已存在"))
针对多个字段做验证的时候使用clean自定义验证
def clean(self):    pwd1 = self.cleaned_data.get(‘password‘)    pwd2 = self.cleaned_data.get(‘re_password‘)

if pwd1 == pwd2:        pass    else:        self.add_error(‘re_password‘, ValidationError(‘密码输入不一致‘))

原文地址:https://www.cnblogs.com/louzi/p/9367172.html

时间: 2024-08-04 01:58:44

Form组件钩子自定义验证的相关文章

Django 批量插入数据、自定义分页器、多表关系的建立及Form组件(待更新。。。)

目  录 django批量出入数据 自定义分页器 创建多对多表关系的建立 form组件 form组件钩子函数 一.django批量出入数据 视图函数: from app01 import models # 向表中插入1000条数据 def index(request): # 方式1: # for i in range(1000): # models.Book.objects.create(title='第%s本书'%i) # book_Queryset = models.Book.objects

[oldboy-django][2深入django]Form组件功能: 数据格式验证 + 保留上次输入的值(如果有很多输入项,这样正确项不必重复输入,错误项也能提示错误信息)

1 需求:登录或者注册页面存在以下问题 - 无法记住上次提交的内容,(如果有很多输入项,这样正确项不必重复输入,错误项也能提示错误信息)- 重复进行提交数据的校验(数据是否为空,长度大小等等) 2 django的Form组件实现 2.1 Form组件实现数据验证方法 2.1.1 流程操作 - 定义规则(数据的格式,字段必须和表单上name属性一致) class LoginForm(Form): 字段名 = fields.xxFields(参数) # 定义了一个输入框的数据格式要求 实例化对象ob

【Django】Form组件

目录 Form组件介绍 常用字段与插件 Form组件中所有内置字段 从数据库中获取数据 校验示例 检验手机号是否合法 方式一(基本操作) 方式二(自定义验证规则) 方式三(利用钩子) 验证密码一致性 钩子 局部钩子 全局钩子 进阶 批量添加样式 ModelForm Form套Form @ *** Form组件介绍 在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,

17 Django Form组件

目录 一.Form 介绍 二.注册功能校验数据案例 1.普通方式手写注册功能 2. 使用Form组件实现注册功能校验数据 三.Form组件如何校验数据 四.Form组件如何渲染前端页面 方式一: 方式二: 方式三: 五.Form组件如何展示错误信息 六.Form组件 参数 七.Form组件 钩子函数 1. 局部钩子函数 2. 全局钩子函数 一.Form 介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多

Flask 【第十篇】自定义Form组件

一.wtforms源码流程 1.实例化流程分析 # 源码流程 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._wtforms_meta中 2. 执行构造方法 a. 循环cls._unbound_fields中的字段,并执行字段的bind方法,然后将返回值添加到 self._fields[name] 中. 即: _fields = { name: wtforms.fields.core.StringField

自定义form组件

一.wtforms源码流程 1.实例化流程分析 1 # 源码流程 2 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._wtforms_meta中 3 2. 执行构造方法 4 5 a. 循环cls._unbound_fields中的字段,并执行字段的bind方法,然后将返回值添加到 self._fields[name] 中. 6 即: 7 _fields = { 8 name: wtforms.fields.

Flask学习【第10篇】:自定义Form组件

wtforms源码流程 实例化流程分析 1 # 源码流程 2 1. 执行type的 __call__ 方法,读取字段到静态字段 cls._unbound_fields 中: meta类读取到cls._wtforms_meta中 3 2. 执行构造方法 4 5 a. 循环cls._unbound_fields中的字段,并执行字段的bind方法,然后将返回值添加到 self._fields[name] 中. 6 即: 7 _fields = { 8 name: wtforms.fields.core

Django---FORM组件.FORM组件的字段,FORM组件校验流程,FORM组件的全局和局部钩子,FORM和Model的组合

Django---FORM组件.FORM组件的字段,FORM组件校验流程,FORM组件的全局和局部钩子,FORM和Model的组合 一丶FORM的介绍 1.生成页面可用的HTML标签 2.对用户提交的数据进行校验 3.保留上次输入内容 二丶使用form组件实现注册功能 from django import forms # 导入forms组件 # 按照Django form组件的要求自己写一个类 class RegForm(forms.Form): # 继承Form name = forms.Ch

python---django中form组件(数据添加前使用自定义方法进行验证,以及源码分析)

form组件代码: from app02.models import Userfrom django.core.exceptions import ValidationError class AjaxForm(forms.Form): user = fields.CharField( required=True, min_length=3, max_length=7, ) email = fields.EmailField( required=True, ) #自定义方法 clean_字段名 #