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. webdriver中的等待——主要讲解WebDriverWait()

    webdriver中的等待--主要讲解WebDriverWait() 强制等待:sleep() 隐式等待:implicitly_wait() 显示等待:WebDriverWait() 与until() ...

  2. Python+Selenium学习笔记17 - HTML测试报告

    运行少量case时 1 # coding = utf-8 2 3 from selenium import webdriver 4 import unittest 5 import time 6 fr ...

  3. NVIDIA Tensor Cores解析

    NVIDIA Tensor Cores解析 高性能计算机和人工智能前所未有的加速 Tensor Cores支持混合精度计算,动态调整计算以加快吞吐量,同时保持精度.最新一代将这些加速功能扩展到各种工作 ...

  4. Hash源码注释解析

    部分代码注释解析: 1 import java.io.IOException; 2 import java.io.InvalidObjectException; 3 import java.io.Se ...

  5. 简单测试 APISIX2.6 网关

    Apache APISIX是一个动态的.实时的.高性能的 API 网关.它提供丰富的流量管理功能,例如负载均衡.动态上游服务.金丝雀发布.断路.身份验证.可观察性等.您可以使用 Apache APIS ...

  6. WizTree——一个扫描快似Everything的硬盘空间分析工具

    虽然我平时用的主要是Linux,但是由于实际环境是win10,对于磁盘资源的控制,我主要是通过Windows自带的文件资源管理器来查看的,但是显然这个工具不够直观.于是,我也被安利过SpaceSnif ...

  7. 面试官:如何在分布式场景下生成全局唯一 ID?

    在分布式系统中,有一些场景需要使用全局唯一 ID ,可以和业务场景有关,比如支付流水号,也可以和业务场景无关,比如分库分表后需要有一个全局唯一 ID,或者用作事务版本号.分布式链路追踪等等,好的全局唯 ...

  8. Docker与k8s的恩怨情仇(二)—用最简单的技术实现“容器”

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 上次我们说到PaaS的发展历史,从Cloud Foundry黯然退场,到Docker加冕,正是Docker& ...

  9. Springboot WebFlux集成Spring Security实现JWT认证

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 在之前的文章<Springboot集成Spring Security实现JWT认证>讲解了如何在传统 ...

  10. 一次性讲清楚spring中bean的生命周期之二:FactoryBean的前世今生

    前言 在<spring中FactoryBean是什么bean>一文中,带着小伙伴学习了spring中的FactoryBean,了解了到了FactoryBean其实是一种生产Bean的bea ...