内容概要:

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组件的更多相关文章

  1. Python之路【第二十一篇】:Django之Form组件

    Django之Form组件   Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1. ...

  2. python Django之Form组件

    python Django之Form组件 Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试 ...

  3. WEB框架Django之Form组件

    Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 一 通过form实现校验字段功能 模型:mod ...

  4. 〖Python〗-- Django的Form组件

    [Django的Form组件] Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 Form类的使 ...

  5. 转载:Django之Form组件

    Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 小试牛刀 1.创建Form类 +? 1 2 3 ...

  6. Django之Form组件

    Django之Form组件 本节内容 基本使用 form中字段和插件 自定义验证规则 动态加载数据到form中 1. 基本使用 django中的Form组件有以下几个功能: 生成HTML标签 验证用户 ...

  7. 第十一篇:web之Django之Form组件

    Django之Form组件   Django之Form组件 本节内容 基本使用 form中字段和插件 自定义验证规则 动态加载数据到form中 1. 基本使用 django中的Form组件有以下几个功 ...

  8. Django之Form组件(一)

    Django之Form组件(一) Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 基本操作:字 ...

  9. python框架之Django(10)-Form组件

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

随机推荐

  1. static int a

    static int a只被本文件可见,外部文件不可见;而int a如果在外部文件作以下声明: extern int a,那么它在声明的文件里也是可见的 详见:http://bbs.csdn.net/ ...

  2. 使用Loadrunner监控Windows资源

    为了区分把装有loadrunner的机器称作A,被监控资源的服务器(windows)称作B 1.确保B机器Administrator账户是可使用状态:右键计算机→ 管理→ 本地用户和组→ 用户,其中A ...

  3. 用log4net快速构建asp.net 异常日志

    log4net是一个非常完善的日志组件. 有着强大的可配置性. 有助于提高开发效率 .log4net是apache组织开发的日志组件, 同其姐妹log4j一样, 是一个开源项目. 可以以插件的形式应用 ...

  4. SwiftHN阅读器应用IOS源码

    SwiftHN是用Swift语言编写的Hacker News阅读器,同时采用了iOS 8最新的API. <ignore_js_op> <ignore_js_op> 详细说明:h ...

  5. MYSQL短索引

    优化MYSQL时,可以尽量使用短索引,如果只是为了提高读取的速度,可以优先使用聚合索引,把几个字段聚集在一起,当然缺点在于操作(写)的时候会降低效率,短索引一般都是开头几个字符基本不同的时候,可以考虑 ...

  6. UNC路径格式

    \\192.168.3.66\c$  访问本地网内计算机

  7. 如何在Git提交空文件夹

    1,git clone url 拉取代码至本地 2,mkdir 文件夹名称 在本地创建文件夹 3,cd 文件夹名称 git init 初始化文件夹 vi .gitkeep 创建.gitkeep文件,内 ...

  8. for循环语句中的先后执行顺序

    for(int i=0;i<10;i++){ cout<<i; } 分析程序运行结果:for(cout<<"a";cout<<" ...

  9. [BZOJ] 3875: [Ahoi2014&Jsoi2014]骑士游戏

    设\(f[x]\)为彻底杀死\(x\)号怪兽的代价 有转移方程 \[ f[x]=min\{k[x],s[x]+\sum f[v]\} \] 其中\(v\)是\(x\)通过普通攻击分裂出的小怪兽 这个东 ...

  10. mysql基础,修改数据表