发现ModelForm很好用,用来做form表单验证效果很好。但是也要注意几点。

forms的用法:

  •   使用默认方式:继承forms.Form类,类里面的字段名称一定要和前端HTML里面的form表单里面的name属性一致,当前端数据提交时,通过views视图里面的is_valid()方法自动验证数据是否格式正确。

    class RegisterForm(forms.Form):
    user = forms.CharField(min_length=6,
    max_length=20,
    error_messages={'required': '用户名不能为空.', 'min_length': "用户名长度不能小于6个字符", 'max_length': "用户名长度不能大于20个字符"}
    )
    pwd=forms.CharField(min_length=8,error_messages={'required': '密码不能为空.', 'min_length': "用户名长度不能小于6个字符"})
    email=forms.EmailField(error_messages={'required': '邮箱不能为空.'})
  •   使用自定义方法:自定义校验方式,定义一个以clean_开头的方法,后面加上需要校验的的字段,注意需要使用一个异常ValidationError 

    

from django.core.exceptions import ValidationError
checkCode = fields.CharField(
error_messages={'required': '验证码不能为空.'}
)
# 自定义验证方法
# 在需要自定义的字段前面加上clean_ def clean_checkCode(self):
if self.request.session.get('CheckCode').upper() != self.request.POST.get('checkCode').upper():
raise ValidationError(message='验证码错误', code='invalid')

如果需要应用request请求,那么可以另外继承一个类,以便引入request

from django import forms
from django.forms import fields
from django.core.exceptions import ValidationError class BaseForm(object):
def __init__(self, request, *args, **kwargs):
self.request = request
super(BaseForm, self).__init__(*args, **kwargs) class Register(BaseForm, forms.Form): account = fields.RegexField('[a-zA-Z]+[0-9]{0,32}',
min_length=8,
max_length=32,
error_messages={r'required': '不能为空', 'invalid': '以字母开头,包含字母,数字',
'max_length': '不能大于32位', r'min_length': '不能小于8位'})
password = fields.RegexField(
'^(?=.*[0-9])(?=.*[a-zA-Z])(?=.*[!@#$\%\^\&\*\(\)])[0-9a-zA-Z!@#$\%\^\&\*\(\)]{3,32}$',
min_length=3,
max_length=32,
error_messages={'required': '密码不能为空.', 'invalid': '密码必须包含数字,字母、特殊字符', 'min_length': "密码长度不能小于3个字符",
'max_length': "密码长度不能大于32个字符"}
)
email = fields.EmailField(error_messages={
'required': '邮箱不能为空',
'invalid': '邮箱格式不正确'
})
checkCode = fields.CharField(
error_messages={'required': '验证码不能为空.'}
)
# 自定义验证方法
# 在需要自定义的字段前面加上clean_ def clean_checkCode(self):
if self.request.session.get('CheckCode').upper() != self.request.POST.get('checkCode').upper():
raise ValidationError(message='验证码错误', code='invalid')

如何校验数据呢

  使用forms.Form的子类(就是刚才你建立的),将前端请求的数据当做参数创建对象,当对象调用is_valid()方法时,它将自动校验同名的数据。

clean():是获取验证通过的字段的方法。

error是获取验证失败的字段的失败信息:

  error.as_json():将信息转化成json格式的字符串 例如:(

{"account": [{"message": "\u4e0d\u80fd\u4e3a\u7a7a", "code": "required"}], "password": [{"message": "\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a.", "code": "required"}], "email":[{"message": "\u90ae\u7bb1\u4e0d\u80fd\u4e3a\u7a7a", "code": "required"}], "checkCode": [{"message": "\u9a8c\u8bc1\u7801\u4e0d\u80fd\u4e3a\u7a7a.", code": "required"}]})

  error.as_data():获取失败信息,不过其中是ValidationError对象  例如:({'account': [ValidationError(['不能为空'])], 'password':[ValidationError(['密码不能为空.'])], 'email': [ValidationError(['邮箱不能为空'])], 'checkCode': [ValidationError(['验证码不能为空.'])]}

  error.as_text():获取信息内容: 例如:(

* account
* 不能为空
* password
* 密码不能为空.
* email
* 邮箱不能为空
* checkCode
* 验证码不能为空.

但是如何获取json字符串勒

  那就是使用as_json(),他获取json格式的字符串,可以使用json.loads()变成json()格式,在前端解析的时候使用JSON.parse()方法获取内容,同事还能够避免编码的问题

Django ModelForm 校验数据格式的更多相关文章

  1. python 全栈开发,Day110(django ModelForm,客户管理之 编辑权限(一))

    昨日内容回顾 1. 简述权限管理的实现原理. 粒度控制到按钮级别的权限控制 - 用户登陆成功之后,将权限和菜单信息放入session - 每次请求时,在中间件中做权限校验 - inclusion_ta ...

  2. 【python】-- Django ModelForm

    Django ModelForm Django的ModelForm的验证方式相比较form + Model的验证方式有下列区别: ModelForm没有form + Model的低耦合性 ModelF ...

  3. django modelform中的self.instance

    在stackoverflow上看到一个问题,正好是我疑惑很久的相关问题. [原问题地址]https://stackoverflow.com/questions/18265023/self-instan ...

  4. 关于Django ModelForm渲染时间格式问题

    关于Django ModelForm渲染时间格式问题 直接定义DateTimeInput或者DateTimeFile是不行的,渲染在html页面中的仍然是Input text类型 解决办法:自定义小部 ...

  5. 使用ModelForm校验数据唯一性

    在设计模型类的时候,将指定字段设置unique=true属性,可以保证该字段在数据库中的唯一性. 使用ModelForm可以将指定模型类快速生成表单元素.在提交数据后,使用is_valid()校验时, ...

  6. django Modelform

    前言: 为什么要用form去验证呢? 我们提交的是form表单,在看前端源码时如果检查到POST URL及我们提交的字段,如果没有验证我们是否可以直接POST数据到URL,后台并没有进行校验,直接处理 ...

  7. Django - ModelForm组件

    一.ModelForm组件 这是一个神奇的组件,通过名字我们可以看出来,这个组件的功能就是把model和form组合起来,先来一个简单的例子来看一下这个东西怎么用:比如我们的数据库中有这样一张学生表, ...

  8. django Modelform 使用

    前言: 为什么要用form去验证呢? 我们提交的是form表单,在看前端源码时如果检查到POST URL及我们提交的字段,如果没有验证我们是否可以直接POST数据到URL,后台并没有进行校验,直接处理 ...

  9. Django ModelForm and Form

    django表单系统中,所有的表单类都作为django.forms.Form的子类创建,包括ModelForm 关于django的表单系统,主要分两种 基于django.forms.Form 基于dj ...

随机推荐

  1. A Nice Paper About Mobile Data Offloading

    关于Mobile Data Offloading这个研究领域的Paper基本上该有的都看过了,我想即使再有也无非是那些套路,新不到哪去.同样,这篇paper也是这样,它的出发点是改进原有的利用ad h ...

  2. AlarmManager的使用和七牛云android SDK上传图片

    一学期的课程设计又开始了,虽然以后不搞安卓,但是课设还是想好好完成的,因为之前做过地图开发,所以选了一个跟 这个相关的题目,其实有一个校车系统也可以选,但是之前做过一个相似度接近80%的东西,不想混混 ...

  3. 同时使用 Ant Design of React 中 Mention 和 Form

    使用场景,在一个列表中,点击每一行会弹出一个表单,通过修改表单数据并提交来修改这一行的数据,其中某个数据的填写需要通过Mention实现动态提示及自动补全的功能. 具体效果为: 遇到的问题: 1.希望 ...

  4. UFLDL 教程学习笔记(三)自编码与稀疏性

    UFLDL(Unsupervised Feature Learning and Deep Learning)Tutorial 是由 Stanford 大学的 Andrew Ng 教授及其团队编写的一套 ...

  5. linux系统中的文件权限详解(转)

    一.在<Linux系统中如何查看文件属性>中介绍了通过ls指令来查看文件的属性,具体如下: [命令] letuknowit@ubuntu:/$ cd /tmp letuknowit@ubu ...

  6. 在Kubernetes中部署GlusterFS+Heketi

    目录 简介 Gluster-Kubernetes 部署 环境准备 下载相关文件 部署glusterfs 部署heketi server端 配置heketi client 简介 在上一篇<独立部署 ...

  7. 122. 买卖股票的最佳时机 II-leetcode

    题目: 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你可以尽可能地完成更多的交易(多次买卖一支股票). 注意:你不能同时参与多笔交易(你必 ...

  8. 搭建oracle linux虚拟机报错解决

    sysctl -P 报错解决办法问题症状修改 linux 内核文件 #vi /etc/sysctl.conf后执行sysctl  -P 报错error: "net.bridge.bridge ...

  9. VPS杂谈(一)

    1. VPS购买推荐 可参考:http://www.laozuo.org/myvps 2. VPS配置SSH端口号 购买的VPS的主机,一般情况下端口号不是22,被改成了其它的,这个时候为了方便自己的 ...

  10. C#winform窗体用户控件自定义事件

    C#许多事情都和事件有关系,大部分的事情我们可以通过C#自己的事件来完成,但如果我们自己新建了一个自定义控件,我们该如何定义自己想要的事件呢?下面我就来为大家粗略的讲解一番. 假设我们自定义了一个控件 ...