1、form

from django import forms
from django.core.exceptions import ValidationError #出现异常时用的
from user import models #validators的先验证
#第一步验证
def test_phone(value):
print('test_phone',3)
if len(value) != 11:
raise ValidationError('手机号码格式不正确')#抛出异常
else:
return value class ArticleForm(forms.Form):
#字段名称要和提交的字段相同
title = forms.CharField(required=True,#是否必填
validators=[test_phone],#自定义校验,公共校验,验证手机,邮箱
strip=False,#是否去掉输入的空格,默认为True
error_messages={#错误信息提示
'required':'必填参数未填',
'max_length':'最大10个字符',
'min_length':'最小5个字符'
}) # 字段名称要和提交的字段相同
# title = forms.CharField(required=True, # 是否必填
# max_length=10, # 最大字符长度
# min_length=5, # 最小字符长度
# strip=False, # 是否去掉输入的空格,默认为True
# error_messages={ # 错误信息提示
# 'required': '必填参数未填',
# 'max_length': '最大10个字符',
# 'min_length': '最小5个字符'
# }) #form 中的钩子函数
#第三步对全局进行验证
def clean(self):
print('clean',1)
# 通过 self.cleaned_data获取所有的数据
return self.cleaned_data #针对个别字段进行验证
#第二步对个别数据进行验证
def clean_title(self):
print('clean_title',2)
#验证手机号是否是我们系统的
return self.cleaned_data.get('title')
def clean_content(self):
pass

views.py中的代码块

from user.forms import ArticleForm,StudentForm
def add_article(request):
if request.method == 'GET':
return render(request,'post.html')
else:
article_obj = ArticleForm(request.POST)
f = article_obj.is_valid()#获取校验结果
if f:
cleaned_data = article_obj.cleaned_data#校验通过后,结果会存在cleaned_data中,是个dict
print(cleaned_data)
else:
print(article_obj.errors)
return HttpResponseRedirect(article_obj.errors)

2、modelform

#  model + form
def test_name(value):
if value == 'dsx':
raise ValidationError('姓名不存在。')
else:
return value class StudentForm(forms.ModelForm):
# 当你觉得model写的验证规则不符合你的要求,可以像forms.Form 一样进行验证
name = forms.CharField(validators=[test_name]) class Meta:
model = models.Student # 创建类变量和model建立映射关系
# fields = '__all__' # 验证全部字段
# fields = ['name'] # 显示指定列验证 只有指定的验证的字段才会出现在cleaned_data中
exclude = ['age'] # 排除了就不会出现在cleaned_data中 def clean(self):
if self.cleaned_data.get('name') == 'ssz':
raise ValidationError('姓名是射手座')
else:
return self.cleaned_data # 单个字段验证,必须要争在form中有些这个 字段
def clean_name(self):
if self.cleaned_data.get('name') == 'nhy':
raise ValidationError('姓名是nhy')
else:
return self.cleaned_data.get('name')

views.py中的代码块

def student(request):
if request.method == 'GET':
return render(request,'student.html')
else:
studentObj = StudentForm(request.POST)
f = studentObj.is_valid()
if f:
print('cleaned_data',studentObj.cleaned_data)
else:
print('errormsg',studentObj.errors)
return HttpResponse('ok')

Django基础011-form&modelform的更多相关文章

  1. django基础 -- 10.form , ModelForm ,modelformset

    一.生成页面可用的 HTML标签 1.form 所有内置字段 Field required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label ...

  2. Django基础之form组件

    Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...

  3. Django基础之Form表单验证

    Form表单验证 1.创建Form类(本质就是正则表达式的集合) from django.forms import Form from django.forms import fields from ...

  4. Django基础之form表单

    1. form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时, 我们在好多场景下都需要对用户的输入做校验, 比如 ...

  5. Django基础之Form和ModelForm组件

    https://www.cnblogs.com/clschao/articles/10486468.html 1.创建django项目 2.创建py文件 3.导入form from django im ...

  6. Django基础之form操作

    Form表单的功能 自动生成HTML表单元素 检查表单数据的合法性 如果验证错误,重新显示表单(数据不会重置) 数据类型转换(字符类型的数据转换成相应的Python类型) Form相关的对象包括 Wi ...

  7. Django基础之form表单的补充进阶

    1. 应用Bootstrap样式 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...

  8. 3 django系列之Form表单在前端web界面渲染与入库保存

    author: 温柔易淡(Leo),欢迎技术交流与拍砖 preface 我们在前端写表单的时候,其实可以使用django自带的forms功能来实现,特别是在处理 修改已经存在数据 的场景特别好用,下面 ...

  9. django基础窗口类的使用

    django基础窗口form表单的运用 具体效果图如下: 首先确定表单中的数据集,先自己创建一个forms.py或者在原来的models.py中添加: 1代码如下 class ContactForm( ...

  10. {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm

    Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...

随机推荐

  1. IDEA中怎么创建ini文件

    首先博主在这使用的是idea的2019.3.2的版本,不知道的话可以打开help菜单的about查看 第一步: 具体需要在setings安装ini插件 第二步: 在File Types中查看ini,没 ...

  2. 201871030136-颜静 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    ​ 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST/ 这个作业要求链接 https://www.cnblogs.com/nwnu- ...

  3. java中的NIO和IO到底是什么区别?20个问题告诉你答案

    摘要:NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多. 本文分享自华为云社区<jav ...

  4. Spring boot未授权访问造成的数据库外联

    一.spring boot 日常测试或攻防演练中像shiro,fastjson等漏洞已经越来越少了,但是随着spring boot框架的广泛使用,spring boot带来的安全问题也越来越多,本文仅 ...

  5. Salesforce LWC学习(三十四) 如何更改标准组件的相关属性信息

    本篇参考: https://www.cnblogs.com/zero-zyq/p/14548676.html https://www.lightningdesignsystem.com/platfor ...

  6. 重新整理 .net core 实践篇—————异常中间件[二十]

    前言 简单介绍一下异常中间件的使用. 正文 if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } 这样写入中间件哈,那么在env环 ...

  7. Reactor3 中文文档(用户手册)

    文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...

  8. MAT工具定位分析Java堆内存泄漏问题方法

    一.MAT概述与安装 MAT,全称Memory Analysis Tools,是一款分析Java堆内存的工具,可以快速定位到堆内泄漏问题.该工具提供了两种使用方式,一种是插件版,可以安装到Eclips ...

  9. 示例讲解PostgreSQL表分区的三种方式

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 表分区是解决一些因单表过大引用的性能问题的方式,比如某张表过大就会造成查询变慢,可能分区是一种解决方案.一般建议 ...

  10. 安装nodejs版本模块报错notsup Unsupported platform for n

    使用npm install -g n报错 如果出现npm ERR! notsup Unsupported platform for n@6.7.0: wanted {"os":&q ...