Django 三—— Form组件
内容概要:
1.Django Form如何自定义验证字段
2.Django Form如何动态的显示数据库中新插入的数据
3.Tyrion
Django的Form(用于验证用户请求合法性的一个组件)
Django的Form主要具有一下几大功能:
- 生成HTML标签
- 验证用户数据(显示错误信息),判断字段类型、长度、格式是否正确
- 保留页面信息
- 设置页面显示的初始化内容
1.如何自定义验证字段
自定制验证:
- 单一字段 def clean_字段名(self):
- 组合字段 def _post_clean(self):
- 组合字段 def clean(self):
forms.py中
#专门建forms.py文件,用于放各个模块的字段
from django import forms
from django.core.exceptions import ValidationError
from django.forms import fields class UserForm(forms.Form):
# username = forms.CharField(max_length=32) forms.或者fields.都可以
username = fields.CharField(max_length=32,label='用户名')
email = fields.EmailField(label='邮箱') '''
# 自定义验证规则方法一: 可以自定义方法来验证 单个字段 在错误信息级别进行详细的定制,但是它实际最基础的验证还是已经在forms.Form中已经完成:
# forms模块内部有 clean_字段名() 方法,所以可以这样自定义验证:
def clean_username(self):
value = self.cleaned_data['username']
if value =='root':
return value
else:
raise ValidationError('你不是管理员。。。') #主动跑出异常让error接收,必须带参数
'''
'''
#自定义验证规则方法二:可以自定义_post_clean(self)或者clean() 方法来验证 多个字段组合错误 在错误信息级别进行详细的定制使用_post_clean()
def _post_clean(self):
v1 = self.cleaned_data['username']
v2 = self.cleaned_data['email']
if v1 =='root' and v2 == 'root@live.com': #用户名或密码不匹配时会报 KeyError 错误
pass
else:
self.add_error('__all__',ValidationError('用户名或邮箱错误。。。')) #仿造_clean_fields(self)函数写的
#必须是 __all__,否则出不来
'''
# 自定义验证规则方法三: clean() 方法来验证 多个字段组合错误,这样重写clean()方法后,clean里面的数据就不是正确数据了,而数据在cleaned_data里面了
def clean(self):
v1 = self.cleaned_data['username']
v2 = self.cleaned_data['email']
if v1 == 'root' and v2 == 'root@live.com': # 用户名或密码不匹配时会报 KeyError 错误
pass
else:
raise ValidationError('用户名或邮箱错误!!!')
return self.cleaned_data
views文件夹 ==>fm.py中
from django.shortcuts import render from app01 import forms #引入forms.py模块
def index(request):
if request.method =='GET':
obj = forms.UserForm()
return render(request,'fm.html',{'obj':obj})
elif request.method =='POST':
obj = forms.UserForm(request.POST)
# 以前的做法:
if obj.is_valid():
data = obj.clean()
# print(data)
else:
print(obj.errors)
# print(obj.cleaned_data) 自定义验证规则方法三: 改写 clean() 方法来验证 多个字段组合错误,这样重写clean()方法后,
# clean里面的数据就不是正确数据了,而数据在cleaned_data里面了
return render(request, 'fm.html', {'obj': obj})
fm.html中
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{#方式一:#}
{# {{ obj.username }}#}
{# {{ obj.email }}#}
{#方式二:将obj里面的每一个对象简单粗暴的分别以**标签展示#}
{# {{ obj.as_p }}#}
{# {{ obj.as_ul }}#}
{#<table>#}
{# {{ obj.as_table }}#}
{#</table>#}
<form method="post" action="/fm/">
{% csrf_token %}
{{ obj.as_p }}
<input type="submit" value="提交">
</form>
</body>
</html>
urls.py中
from django.conf.urls import url
from django.contrib import admin
from app01.views import fm urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^fm/', fm.index),
]
2.如何动态的显示数据库中新插入的数据?
定义init方法,先继承执行父类方法,再从数据库中取值
在forms.py文件中
'''
专门建forms.py文件,用于放各个模块的字段
内容概要:
1.自定义验证规则
2.如何实时同步数据库数据
'''
from django import forms
from django.core.exceptions import ValidationError
from django.forms import fields
from app01 import models class UserForm(forms.Form):
# username = forms.CharField(max_length=32) forms.或者fields.都可以
username = fields.CharField(max_length=32,label='用户名')
email = fields.EmailField(label='邮箱') user_type = fields.ChoiceField(choices=models.UserType.objects.values_list('id', 'name')) # 例如:让其user_type数据 实时更新 的方法,定义init方法,先继承执行父类方法,再从数据库中取值:
def __init__(self, *args, **kwargs):
super(UserForm, self).__init__(*args, **kwargs)
self.fields['user_type'].widget.choices = models.UserType.objects.all().values_list('id', 'name')
form组件 补充知识:http://www.cnblogs.com/wupeiqi/articles/6144178.html
Tyrion是一个基于Python实现的支持多个WEB框架的Form表单验证组件,其完美的支持Tornado、Django、Flask、Bottle Web框架。
http://www.cnblogs.com/wupeiqi/p/5938916.html
Django 三—— Form组件的更多相关文章
- Python之路【第二十一篇】:Django之Form组件
Django之Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1. ...
- python Django之Form组件
python Django之Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试 ...
- WEB框架Django之Form组件
Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 一 通过form实现校验字段功能 模型:mod ...
- 〖Python〗-- Django的Form组件
[Django的Form组件] Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 Form类的使 ...
- 转载:Django之Form组件
Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建Form类 +? 1 2 3 ...
- Django之Form组件
Django之Form组件 本节内容 基本使用 form中字段和插件 自定义验证规则 动态加载数据到form中 1. 基本使用 django中的Form组件有以下几个功能: 生成HTML标签 验证用户 ...
- 第十一篇:web之Django之Form组件
Django之Form组件 Django之Form组件 本节内容 基本使用 form中字段和插件 自定义验证规则 动态加载数据到form中 1. 基本使用 django中的Form组件有以下几个功 ...
- Django之Form组件(一)
Django之Form组件(一) Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 基本操作:字 ...
- python框架之Django(10)-Form组件
介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来.与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入 ...
随机推荐
- vue地址插件多级联动自适应 + github地址
https://github.com/cqzyl/vue-manyAddress
- img IE下支持最大宽度
border:0 none; max-width: 560px; height:auto; width:expression(this.width > 600 ? "600px&quo ...
- rem媒体查询
@media only screen and (min-width: 1080px), only screen and (min-device-width:1080px) { html,body { ...
- css动画-模拟正余弦曲线
今天就写一个css3抛物线的动画吧= = 从左到右的抛物线动画,我们就暂且把动作分为匀速向右运动和变速的上下运动. 水平匀速运动我们可以利用 translateX(x):定义 2D 转换,沿着 X 轴 ...
- 初识Notification
通知(Notification)是 Android 系统中比较有特色的一个功能,当某个应用程序希望向用户发出一些提示信息,而该应用程序又不在前台运行时,就可以借助通知来实现.发出一条通知后,手机最上方 ...
- WPS去掉英语单词下面的红斜线
我们在使用WPS的时候,经常会用到英语但是,但是在编码的时候,有些单词是缩写形成的,WPS就会自动验证,产生红色波浪线,提示我们单词写错的问题,那看起来就显得很不美观别扭 那么我们不想要这个红斜杠,怎 ...
- objective C 内存管理及属性方法具体解释
oc为每一个对象提供一个内部计数器.这个计数器跟踪对象的引用计数,当对象被创建或拷贝时.引用计数为1.每次保持对象时,调用retain接口.引用计数加1.假设不需要这个对象时调用release,引用计 ...
- 【转】Web实时通信之Socket.IO ,真正的兼容ie
前面两篇文章使用了Ajax long polling和WebSocket两种常用的Web实时通信方式构建了简单的聊天程序. 但是,由于浏览器的兼容问题,不是所有的环境都可以使用WebSocket这种比 ...
- Mybatis-注解开发
常用注解 @Insert:实现新增 @Update:实现更新 @Delete:实现删除 @Select:实现查询 @Result:实现结果集封装 @Results:可以与@Result 一起使用,封装 ...
- Java代码工具箱之解析单行单列简单Excel
1. 使用开源工具 jxl.jar 2. 功能:解析常规Excel.xls格式测试可行,xlsx未测试.Excel测试格式为常规类似table这种简单布局文件.第一行为标题,后面行为内容.代码 可正确 ...