Django提供了3中方式来验证表单

官网文档:https://docs.djangoproject.com/en/1.9/ref/validators

1.表单字段验证器
  a.引入:from django.core.exceptions import ValidationError
  b.定义验证方法,验证不通过抛一个ValidationError异常

    def validate_name(value):
      验证不通过
        raise ValidationError("%s的信息已经存在"%value)
      验证通过
        pass

  c.在Form中定义字段时候,通过validators指定验证器
    name = forms.CharField(label="名称", validators=[validate_name])
例子:

from django import forms
from hello.models import Publisher
from django.core.exceptions import ValidationError def validate_name(value):
if value == "xiaol":
raise ValidationError("%s的信息已经存在" % value)
else:
pass class PublisherForm(forms.ModelForm):
name = forms.CharField(label="名称", validators=[validate_name])
class Meta:
model = Publisher
exclude = ("id",)

2.clean_filedName,针对某个字段进行验证
  a.在ModelForm中定义clean_filedName实例方法

  b.这里如果验证不通过抛异常

  c.如果验证通过需要把值在return出去,否则表单就获取不到这个值了
    def clean_name(self):
      value = self.cleaned_data.get('name')
      验证不通过
        raise ValidationError("%s的信息已经存在"%value)
      验证通过
        return value

例子:

from django import forms
from hello.models import Publisher
from django.core.exceptions import ValidationError class PublisherForm(forms.ModelForm):
def clean_name(self):
value = self.cleaned_data.get('name')
if value == "xiaol":
raise ValidationError("%s的信息已经存在" % value)
else:
return value
class Meta:
model = Publisher
exclude = ("id",)

3.表单clean方法,针对整个表单验证(比如确认密码这样的需求)
  a.在ModelForm中定义clean实例方法,
  b.这里是对整个表单进行验证,所以取值的时候就不能像clean_filedName那样取
  c.需要先调用父类的clean方法,把表单的值保存到本地变量中,在从本地变量中取想要的值
  d.和clean_filedName一样,这里验证通过也需要返回,但是这里返回的不是一个值,而是通过父类方法获取到的那个本地变量
  e.和clean_filedName不同,这里验证不通过不是抛异常,而是通过 self._errors['字段名']=self.error_class(["提示信息"])的方式返回
    def clean(self):
      cleaned_data = super(XXXModelForm,self).clean()
      value = cleaned_data.get('name')
      验证不通过
        self._errors['name']=self.error_class(["%s的信息已经存在" % value])
      验证通过
        return cleaned_data

例子:

from django import forms
from hello.models import Publisher class PublisherForm(forms.ModelForm):
def clean(self):
cleaned_data = super(PublisherForm, self).clean()
value = cleaned_data.get('name')
if value == "xiaol":
self._errors['name'] = self.error_class(["%s的信息已经存在" % value])
else:
return cleaned_data
class Meta:
model = Publisher
exclude = ("id",)

备注:如果clean_fieldName和clean都定义了,那么两个都会执行,顺序是:clean_fieldName->clean

17.Django表单验证的更多相关文章

  1. Python菜鸟之路:Django 表单验证

    前言 Django中完成表单验证,常用的有两种方法: 一种是通过HTML + JS + Ajax实现. 另一种是通过Django自身的forms模块来生成相应个HTML标签来完成表单验证.这是本节着重 ...

  2. django 表单验证和字段验证

    表单验证和字段验证 表单验证发生在数据验证之后.如果你需要自定义这个过程,有几个不同的地方可以修改,每个地方的目的不一样.表单处理过程中要运行三种类别的验证方法.它们通常在你调用表单的is_valid ...

  3. django表单验证和跨站伪造csrf

    Form验证 django中的Form一般有两种功能: 输入html 验证用户输入 django使用内置form方法验证表单提交的数据 html页面 <!DOCTYPE html> < ...

  4. Django表单验证

    从前端提交的各种数据可能存缺少必要字段以及包含非法数据等问题, 并且通常需要进行类型转换后才可以交由业务逻辑处理. 我们当然可以在控制器(Django的views函数)中完成这些工作, 但是这样会使控 ...

  5. Django-website 程序案例系列-17 forms表单验证的字段解释

    1.Django内置字段如下: Field required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label标签或显示内容 initial ...

  6. python_way day19 HTML-day5 (form表单验证,CSRF,cookie,session,缓存)

    python-way day19 1. dJango的form表单验证 2.CSRF 跨站请求伪造 3.cookie,session 4.缓存 一,django表单验证功能 1.django验证基础: ...

  7. angular学习笔记(二十)-表单验证

    本篇主要介绍angular中的表单验证: 表单验证主要有以下一些内容: 1. required指令: 相当于html5的required属性,验证不能为空 2. ng-maxlength属性: 验证内 ...

  8. Django实现表单验证、CSRF、cookie和session、缓存、数据库多表操作(双下划綫)

    通常验证用户输入是否合法的话,是前端js和后端共同验证的,这是因为前端js是可以被禁用的,假如被禁用了,那就没法用js实现验证合法与否了,也就是即使用户输入的不合法,但是也没提示,用户也不知道怎么输入 ...

  9. django之form表单验证

    django中的Form一般有两种功能: 输入html 验证用户输入 #!/usr/bin/env python # -*- coding:utf- -*- import re from django ...

随机推荐

  1. Jenkins 无法下载插件的解决办法

    有时候在安装插件时可能会出现下图的问题: 这应该是由于天朝的墙导致的,所以笔者就用了手动安装的方式 到https://wiki.jenkins-ci.org/display/JENKINS/Plugi ...

  2. [React] Use react-rewards to add microinteractions to React app to reward users for some actions

    It's important that our users enjoy using our application or website. One way we can make it happen ...

  3. Json,String,Map之间的转换

    前提是String的格式是map或json类型的 String 转Json JSONObject  jasonObject = JSONObject.fromObject(str); String 转 ...

  4. 创建你的第一个ionic+cordova应用(1)

    前面我们安装了前端的神器webstorm11,体验到了强大的开发体验,接着我们来安装ionic 必备: Node.js (npm安装工具) 百度下载 官网下载  注:如果官网新版不能安装请用百度下载0 ...

  5. cpu、内存、磁盘

    例一:内存使用率 #!/bin/bash total=$(free -m|grep Mem|awk '{print $2}') used=$(free -m|grep Mem|awk '{print ...

  6. vue 访问子组件示例 或者子元素

    1.子组件 <base-input ref="usernameInput"></base-input> this.$refs.usernameInput 2 ...

  7. 【Nginx】HTTP配置模型

    当Nginx检測到配置文件里存在配置块http{}时.会建立一个ngx_http_conf_ctx_t结构体,该结构体定义例如以下: typedef struct { void **main_conf ...

  8. SQL 怎样 远程备份数据库到本地

    SQL 怎样 远程备份数据库到本地 --1.启用xp_cmdshell USE master EXEC sp_configure 'show advanced options', 1 RECONFIG ...

  9. Smarty Caching缓存 ¥ 我要打赏

    Smarty Caching缓存 https://www.yiibai.com/smarty/smarty_caching.html https://www.w3cschool.cn/smarty/s ...

  10. ASP.NET基本对象介绍

    ASP.NET能够成为一个庞大的软件体系,与它提供了大量的对象类库有很大的关系.这些类库中包含许多封装好的内置对象,开发人员可以直接使用这些对象的方法和属性,因此用较少的代码量就能轻松完成很多对象.  ...