自定义form表单验证

方式一:RegexValidator对象

from django.core.validators import RegexValidator

phone = fields.CharField(
    validators=[RegexValidator(r‘^[0-9]+$‘, ‘请输入数字‘), RegexValidator(r‘^159[0-9]+$‘, ‘数字必须以159开头‘)])   # 自定义验证规则进行验证

方式二:函数
from django.core.exceptions import ValidationError
 
def mobile_validate(value):    mobile_re = re.compile(r‘^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$‘)    if not mobile_re.match(value):        raise ValidationError(‘手机号码格式错误‘)
 
phone = fields.CharField(        validators=[mobile_validate,])   # 自定义验证规则进行验证

方式三:钩子函数1,分析

通过上面分析1,通过_clean_fields实现
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)

通过上面可以实现
def clean_phone(self):    # 去取用户提交的值:可能是错误的,可能是正确    value = self.cleaned_data[‘phone‘]    mobile_re = re.compile(r‘^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$‘)    if not mobile_re.match(value):        raise ValidationError(‘手机号码格式错误‘)

if models.UserInfo.objects.filter(phone=value).count():        raise ValidationError(‘手机号码已经存在‘)

return value

注意钩子字段只能取自己的。不然可能取不到。源码是通过__dict__取得
 

执行流程  1,正则表达式      2,clean钩子函数         
时间: 2024-11-12 15:36:58

自定义form表单验证的相关文章

web前端框架之自定义form表单验证

h3 { background-color: palegreen } 自定义form验证初试 1 1.在后端创建一个类MainForm,并且在类中自定义host ip port phone等,然后写入方法,在post方法中创建MainForm对象,并且把post方法中的self(这里的self指代 的前端的ip,端口等)传入到这个MainForm方法中,在check_valid方法中定义一个参数handler代指传入的self,然后遍历MainForm对象中的属性,然后用handler.get_

看用Tornado如何自定义实现表单验证

我们知道,平时在登陆某个网站或软件时,网站对于你输入的内容是有要求的,并且会对你输入的错误内容有提示,对于Django这种大而全的web框架,是提供了form表单验证功能,但是对于Tornado而言,就没有这功能,所以就需要我们来自己自定义form表单验证,而且这种方法正是Django里的form表单验证的实质内容,也帮我们在后面学习Django理解相关的源码. 写之前,我们必须知道form表单验证的实质是什么? 实质就是正则匹配 我们知道用户提交数据是通过post方式提交,所以我们重写post

Python自动化运维系列之Django Form表单验证

Form表单验证 Django核心功能组件之一,虽然也可以在前端使用JS对表单验证, 但是Django中已经为我们准备好的Form功能还算是很强大的,有时候比较适合运维,为我们简化了很多前端开发工作. Django最主要的几个功能有4个     ·  生成HTML标签     ·  验证数据(表单错误信息提示)     ·  HTML 表单保留上次提交数据     ·  初始化页面表单内容 Django的Form内容还是挺多的,我们可以从一个简单的登陆验证例子来看看Form的基本功能使用 1)新

Django基础之Form表单验证

Form表单验证 1.创建Form类(本质就是正则表达式的集合) from django.forms import Form from django.forms import fields from django.forms import widgets from Mybbs.models import * import re class UserForm(Form): username = fields.CharField( required=True, error_messages={'re

Django中的Form表单验证

回忆一下Form表单验证的逻辑: 前端有若干个input输入框,将用户输入内容,以字典传递给后端. 后端预先存在一个Form表单验证的基类,封装了一个检测用户输入是否全部通过的方法.该方法会先定义好错误信息的字典,并会遍历类的所有属性(对应前端待验证的输入域),调用各自的验证方法,将错误信息(两类,必要与否以及格式正确与否)存入字典,并得出最终的验证结果.在使用时,需要定义继承自Form基类不同的Form类,以对应有着不同输入域的Form表单.在拿到前端给的字典前,要先初始化自定义From类,直

element-ui Form表单验证

element-ui Form表单验证规则全解 element的form表单非常好用,自带了验证规则,用起来很方便,官网给的案例对于一些普通场景完全没问题,不过一些复杂场景的验证还得自己多看文档摸索,自己经过数次爬坑 之后,总结了几种form表单的验证规则,为了便于阅读,验证规则是拆分的,完整的代码放在文末 1. 普通输入验证 <el-form-item label="活动名称" prop="name"> <!-- validate-event属性

python_way day14 HTML-day5 (form表单验证,)

python-way day19 1. dJango的form表单验证 一,django表单验证功能 1.django验证基础: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>django form</title> </head> <body> <div> <i

用jquery写自己的form表单验证

这几天看了锋利的jquery,感觉很不错.特别是jquery强大的选择器.今天就利用jquery写了一个自己的form表单验证的小案例.当巩固下jquery.首先贴下代码,当然只是一个小案例. 思路:   1.<input type="text" Validate="Date" id="date"/>这里的 Validate:是我们需要验证的类型(属于日期类型),这里你也可以自己定义.id属性就不用说了.<input type=

django之form表单验证

django中的Form一般有两种功能: 输入html 验证用户输入 #!/usr/bin/env python # -*- coding:utf-8 -*- import re from django import forms from django.core.exceptions import ValidationError def mobile_validate(value): mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]