Django基础011-form&modelform
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的更多相关文章
- django基础 -- 10.form , ModelForm ,modelformset
一.生成页面可用的 HTML标签 1.form 所有内置字段 Field required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label ...
- Django基础之form组件
Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否 ...
- Django基础之Form表单验证
Form表单验证 1.创建Form类(本质就是正则表达式的集合) from django.forms import Form from django.forms import fields from ...
- Django基础之form表单
1. form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来. 与此同时, 我们在好多场景下都需要对用户的输入做校验, 比如 ...
- Django基础之Form和ModelForm组件
https://www.cnblogs.com/clschao/articles/10486468.html 1.创建django项目 2.创建py文件 3.导入form from django im ...
- Django基础之form操作
Form表单的功能 自动生成HTML表单元素 检查表单数据的合法性 如果验证错误,重新显示表单(数据不会重置) 数据类型转换(字符类型的数据转换成相应的Python类型) Form相关的对象包括 Wi ...
- Django基础之form表单的补充进阶
1. 应用Bootstrap样式 <!DOCTYPE html> <html lang="en"> <head> <meta charse ...
- 3 django系列之Form表单在前端web界面渲染与入库保存
author: 温柔易淡(Leo),欢迎技术交流与拍砖 preface 我们在前端写表单的时候,其实可以使用django自带的forms功能来实现,特别是在处理 修改已经存在数据 的场景特别好用,下面 ...
- django基础窗口类的使用
django基础窗口form表单的运用 具体效果图如下: 首先确定表单中的数据集,先自己创建一个forms.py或者在原来的models.py中添加: 1代码如下 class ContactForm( ...
- {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm
Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...
随机推荐
- 使用goland调试远程代码
前言 很多时候我们都在window上使用goland,并直接使用goland调试go代码. 但是很多时候我们的程序运行在Linux服务器上,虽然可以通过dlv命令行进行手动打断点调试,但是太麻烦了. ...
- 转载 | Scala 如何避免使用 Null
在 Java 里,null 是一个关键字,不是一个对象,所以对它调用任何方法都是非法的. Scala 的 Option类型 Scala在变量和函数返回值可能不会引用任何值的时候使用 Option 类型 ...
- Proteus仿真MSP430单片机的若干问题记录
1.支持的具体型号: P7.8: Proteus8.9: Proteus8.9能够支持的类型明显要多于Proteus7.8.但是对于仿真而言,目前个人还是觉得Proteus7.8更稳定.这也是目前能用 ...
- GPU上的图像和信号处理
GPU上的图像和信号处理 NVIDIA Performance Primitives(NPP)库提供GPU加速的图像,视频和信号处理功能,其执行速度比仅CPU实施快30倍.拥有5000多个用于图像和信 ...
- 尚硅谷Java——宋红康笔记【day1-day5】
day1 注释 1.java规范的三种注释方式: 单行注释 多行注释 文档注释(java特有) 2. 单行注释和多行注释的作用: ① 对所写的程序进行解释说明,增强可读性.方便自己,方便别人 ② 调试 ...
- 痞子衡嵌入式:嵌入式里串口(UART)自动波特率识别程序设计与实现
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是嵌入式里串口(UART)自动波特率识别程序设计与实现. 串口(UART)是嵌入式里最基础最常用也最简单的一种通讯(数据传输)方式,可以说 ...
- AgileConfig轻量级配置中心1.3.0发布,支持多用户权限控制
AgileConfig 当初是设计给我自己用的一个工具,所以只设置了一道管理员密码,没有用户的概念.但是很多同学在使用过后都提出了需要多用户支持的建议.整个团队或者整个公司都使用同一个密码来管理非常的 ...
- ubuntu 如何更改 grub 界面主题
ubuntu 如何更改 grub 界面主题 安装 Liunx 系统的人都知道,系统引导是通过 grub 去引导的,但是 grub 这个界面就很单调,大概是这样子的 这肯定不符合我们潮流青年的审美的~ ...
- Mysql_SQLyog 数据库的创建
1.创建数据库 CREATE DATABASE [IF NOT EXISTS] westos; 2.删除数据库 DROP DATABASE [IF EXISTS] westos; 3.使用数据库 -- ...
- IntelliJ IDEA不好用?那是因为没掌握这些技巧
想要愉快的coding,一个好的IDE肯定少不了.而对于Java开发者来说,IntelliJ IDEA绝对是Java-IDE的首屈一指的选择(eclipse党还请绕我一命). 从我第一次下载IDEA到 ...