需求:

  当用户向Django后端以post提交数据的时候,无论前端是否进行数据合法验证,后端都需要对客户端提交过来的数据进行数据合法性验证,是否可以利用models中表类字段的约束来实现验证,并且可以进一步对某个单独的字段进行自定义验证,并保存呢?

那,如何满足这个需求呢?

  1. 从Django中 导入forms
  2. 定义一个form类,继承forms.ModelForm
  3. 类中定义一个Meta,指定model=表类名, fields=[ ] 列表中添加想要验证的字段
  4. 在和Meta同级定义一个 def函数,函数名为:clean_字段名 方式进行对某个字段的特殊处理,并可以改变这个字段的属性
  5. view中导入这个form类,实例化时候,把request.POST传递进去,通过object.is_valid()判断是否验证成功,验证失败通过object.errors提交错误信息
  6. form验证成功的数据,放在object.cleaned_data中,以字典的形式存放
    __author__ = 'beimenchuixue'
    __blog__ = 'http://www.cnblogs.com/2bjiujiu/' # form.py文件中
    import re
    # 此form验证用户咨询表UserAsk中三个字段,name、mobile、course_name
    # Meta直接利用数据库的约束条件进行字段验证,但是mobile的值要经过特殊验证
    class UserAskFrom(forms.ModelForm): class Meta:
    model = UserAsk
    fields = ['name', 'mobile', 'course_name'] def clean_mobile(self):
    # 对手机号码进行严格验证clean_+字段名
    mobile = self.cleaned_data['mobile']
    REGEX_MOBILE = '^1[358]\d{9}|^147\d{8}|^176\d{8}$'
    p = re.compile(REGEX_MOBILE)
    if p.match(mobile):
    return mobile
    else:
    return forms.ValidationError(u'手机号码错误', code='mobile_invalid') # view.py文件中
    # view中实例化时候,直接通过实例对象.save(commit=True)保存验证好的数据
    class AddUserAskView(View):
    """课程咨询"""
    def post(self, request):
    # 把request.POST传递进去,要求post的key值和form中fields保持一致
    user_ask_form = UserAskFrom(request.POST)
    if user_ask_form.is_valid():
    # 验证成功直接保存, commit=True 表示提交
    user_ask_form.save(commit=True) # 对前端传过来的文件,进行验证并且保存,文件传输,必须保证为用户已经验证登录
    # 以用户更换头像为例子,LoginRequiredMixin要求登录的基类 :http://www.cnblogs.com/2bjiujiu/p/7452902.html
    class UpLoadImageView(LoginRequiredMixin, View):
    """更换图片"""
    def post(self, request):
    # 对于上传的文件,放到request.FILES中,instance=request.user指定验证表字段中的一个唯一数据,对该数据有就更新,没有就增加
    image_form = UpLoadImageForm(request.POST, request.FILES, instance=request.user)
    if image_form.is_valid():
    # 自己通过表单对象save方法进行保存数据
    image_form.save()
    # 返回json数据,包含状态码
    return HttpResponse("{'status':'success'}", content_type='application/json')
    else:
    return HttpResponse("{'status':'fail'}", content_type='application/json')

      

      

  

  

Django_form验证的更多相关文章

  1. Django_Form验证(三)字段,字段的参数,widgets种类

    Form工具是一个很强大的工具,所以他的功能不仅仅是上面2个例子,这里详细记录一下Form的其他功能 字段的一般参数,以CharFields为列子: user=fields.CharField( re ...

  2. Django_Form验证(二),ajax验证

    还是一个简单的html提交页面,ajax提交就不需要form表单了: <p><input id="a" type="text" name=&q ...

  3. Django_Form验证(一)

    Django为我们提供了一个模板来做Form验证,不需要我们再去写复杂的验证代码了 简单的提交信息html页面: <form action="/fff/Form" metho ...

  4. Django之Form、ModelForm 组件

    Django之Form.ModelForm 组件 一.Form组件: django框架提供了一个form类,来处理web开发中的表单相关事项.众所周知,form最常做的是对用户输入的内容进行验证,为此 ...

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

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

  6. DjangoForm 提交验证

    用户提交数据的验证 1.创建模版 -- class LoginForm(forms.Form):.... 2.将请求交给模版,创建一个对象 -- obj = LoginForm(request.POS ...

  7. 【探索】无形验证码 —— PoW 算力验证

    先来思考一个问题:如何写一个能消耗对方时间的程序? 消耗时间还不简单,休眠一下就可以了: Sleep(1000) 这确实消耗了时间,但并没有消耗 CPU.如果对方开了变速齿轮,这瞬间就能完成. 不过要 ...

  8. C# 中参数验证方式的演变

    一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空,如果是字符可能有长度限 ...

  9. Yii1.1的验证规则

    在Yii1.1的数据验证是由CValidator完成,在CValidator中提供了各种基本的验证规则 <?php public static $builtInValidators=array( ...

随机推荐

  1. 设计模式学习(四): 1.简单工厂 (附C#实现)

    New 这是一个典型的情况, 我们需要在运行时来实例化一些具体的类. 在需要修改或者扩展的时候我们就需要改这段代码. 一个程序中可能会多次出现类似的代码, 这使得维护和更新非常困难而且容易出错. 通过 ...

  2. 使用ControllerAdvice注意事项,Ambiguous @ExceptionHandler method mapped for [class org.springframework.web.bind.MethodArgumentNotValidException]

    前言 ControllerAdvice非常好用,可以把系统内部的异常统一处理.用起来也很简单.比如,http://www.cnblogs.com/woshimrf/p/spring-web-400.h ...

  3. 【转载】Linux cgroup资源隔离各个击破之 - io隔离

    Linux Cgroup blkio子系统的用法.   blkio子系统支持的两种IO隔离策略 .1. (Completely Fair Queuing 完全公平队列)cfq io调度策略,支持按权重 ...

  4. 魔方 NewLife.Cube

    魔方 是一个基于 ASP.NET MVC 的 用户权限管理平台,可作为各种信息管理系统的基础框架. 演示:http://cube.newlifex.com 源码 演示账号:admin/admin 源码 ...

  5. [转]Linux里的2>&1究竟是什么

    我们在Linux下经常会碰到nohup command>/dev/null 2>&1 &这样形式的命令. 首先我们把这条命令大概分解下首先就是一个nohup表示当前用户和系 ...

  6. Maven02——回顾、整合ssh框架、分模块开发、私服

    1 回顾 1.1 Maven的好处 节省空间 对jar包做了统一管理 依赖管理 一键构建 可跨平台 应用在大型项目可提高开发效率 1.2 Maven安装部署配置 1.3 Maven的仓库 本地仓库 远 ...

  7. Zabbix实战-简易教程(5)--Proxy和Agent端(源码和yum方式)

    3.3.1 zabbix proxy安装(源码方式) 1.创建目录 mkdir -p /usr/local/zabbix 2.安装必要软件 yum install -y fping(若安装不成功) 或 ...

  8. Zedboard(一)开发环境Vivado

    Vivado是Xilinx(赛灵思)公司出品的开发软件平台,适用于Zedboard开发板. 下面介绍Vivado搭建的过程: 一.注册Xilinx账号.下载安装包 推荐到Xilinx(赛灵思)英文官网 ...

  9. 学习笔记-使用cmd命令行创建nodejs项目

    使用cmd命令行创建nodejs项目 1)在DOS下cd 进入到你想要创建项目的路径. 2)mkdir sing (创建一个sing文件夹) 3)cd sing  4) npm init (初始化工程 ...

  10. BC#65T4 ZYB's Tree

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=5593 点分治被卡了TAT... 正解是dp,可以按层数考虑dp,先预处理跑一边dfs得到子树各层数点数大小 ...