Django的Form主要具有一下几大功能:

  • 生成HTML标签
  • 验证用户数据(显示错误信息)
  • HTML Form提交保留上次提交数据
  • 初始化页面显示内容

基本简单的操作:

from django import forms

class FM(forms.Form):
# 根据form表单中的name来做
username = fields.CharField(
error_messages={'required':'用户名不能为空'},
)
pwd = fields.CharField(
error_messages={'required':'密码不能为空','min_length':'请填写6位以上密码','max_length':'请填写12位以下密码'},
min_length=6,
max_length=12,
)
email = fields.EmailField(
error_messages={'required':'邮箱不合法','invalid':'邮箱格式不正确'}
)

Form.py

def index(request):
if request.method == 'GET':
# 解决错误提示后内容清空的问题
obj = FM()
return render(request,'form_index.html',{'obj': obj})
elif request.method == 'POST':
# 获取用户所有数据
# 每条数据请求验证
# 成功:获取用户提交的数据
# 失败:显示错误信息
obj = FM(request.POST)
# 验证是否合法
ret = obj.is_valid()
if ret:
print('obj.clean****',obj.clean())
print('obj.clead_data*****',obj.cleaned_data)
else:
print('obj.errors****',obj.errors)
print('obj.errors.as_json()*****',obj.errors.as_json())
print('obj****',obj)
# from django.forms.utils import ErrorDict
# obj.errors为ErrorDict类型,所以应该按照字典的方法获取值
print(type(obj.errors))
return render(request,'form_index.html',{'obj': obj,'error_msg': obj.errors})

Views.py

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>form验证组件</title>
<style>
.usernameTF{
background-color: coral;
color: aqua;
}
</style>
</head>
<body> <form action="/form_app/index" method="post">
{% csrf_token %}
<p><input type='text' name='username'/> {{ error_msg.username.0 }}</p>
<p><input type='text' name='pwd'/> {{ error_msg.pwd.0 }}</p>
<p><input type='text' name='email'/> {{ error_msg.email.0 }}</p>
<p><input type="submit" value="提交"></p>
</form> </body>
</html>

form_index.html

进阶操作:

主要涉及widget的使用、初始化默认值,以及记录上次填写的值

from django import forms
from django.forms import widgets
from django.forms import fields class FM(forms.Form):
# 根据form表单中的name来做
username = fields.CharField(
error_messages={'required':'用户名不能为空'},
widget=widgets.Textarea(attrs={'class':'usernameTF'})
)
pwd = fields.CharField(
error_messages={'required':'密码不能为空','min_length':'请填写6位以上密码','max_length':'请填写12位以下密码'},
min_length=6,
max_length=12,
widget=widgets.PasswordInput
)
email = fields.EmailField(error_messages={'required':'邮箱不合法','invalid':'邮箱格式不正确'})

Forms

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>form验证组件</title>
<style>
.usernameTF{
background-color: coral;
color: aqua;
}
</style>
</head>
<body> <form action="/form_app/index" method="post">
{% csrf_token %}
<p>{{ obj.username }} {{ error_msg.username.0 }}</p>
<p>{{ obj.pwd }} {{ error_msg.pwd.0 }}</p>
<p>{{ obj.email }} {{ error_msg.email.0 }}</p>
<p>{{ obj.user }}</p>
<p><input type="submit" value="提交"></p>
</form> </body>
</html>

form_index.html

def index(request):
if request.method == 'GET':
# 加载默认值
initial_dic = {
'username': 'root',
'pwd': '',
'email': '953995648@qq.com',
'user': True
} obj = FM(initial_dic)
return render(request,'form_index.html',{'obj': obj})
elif request.method == 'POST':
# 获取用户所有数据
# 每条数据请求验证
# 成功:获取用户提交的数据
# 失败:显示错误信息
obj = FM(request.POST)
# 验证是否合法
ret = obj.is_valid()
if ret:
print('obj.clean****',obj.clean())
print('obj.clead_data*****',obj.cleaned_data)
else:
print('obj.errors****',obj.errors)
print('obj.errors.as_json()*****',obj.errors.as_json())
print('obj****',obj)
# from django.forms.utils import ErrorDict
# obj.errors为ErrorDict类型,所以应该按照字典的方法获取值
print(type(obj.errors))
return render(request,'form_index.html',{'obj': obj,'error_msg': obj.errors})

Views.py

在使用选择标签时,需要注意choices的选项可以从数据库中获取,但是由于是静态字段 ***获取的值无法实时更新***,那么需要自定义构造方法从而达到此目的。

方式一:

from django.forms import Form
from django.forms import widgets
from django.forms import fields
from django.core.validators import RegexValidator class MyForm(Form): user = fields.ChoiceField(
# choices=((1, '上海'), (2, '北京'),),
initial=2,
widget=widgets.Select
) def __init__(self, *args, **kwargs):
super(MyForm,self).__init__(*args, **kwargs)
# self.fields['user'].widget.choices = ((1, '上海'), (2, '北京'),)
# 或
self.fields['user'].widget.choices = models.Classes.objects.all().value_list('id','caption')

方式二:

使用django提供的ModelChoiceField和ModelMultipleChoiceField字段来实现

from django import forms
from django.forms import fields
from django.forms import widgets
from django.forms import models as form_model
from django.core.exceptions import ValidationError
from django.core.validators import RegexValidator class FInfo(forms.Form):
authors = form_model.ModelMultipleChoiceField(queryset=models.NNewType.objects.all())
# authors = form_model.ModelChoiceField(queryset=models.NNewType.objects.all())

django基础篇05-Form验证组件的更多相关文章

  1. Django 进阶篇之 Form验证

    Django Form验证 在实际的生产环境中比如登录和验证的时候,我们一般都使用Jquery+ajax来判断用户的输入是否为空,假如JS被禁用的话,咱们这个认证屏障是不是就消失了呢?(虽然一般不会禁 ...

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

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

  3. day 64 Django基础十之Form和ModelForm组件

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

  4. 01: Django基础篇

    目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...

  5. iOS系列 基础篇 05 视图鼻祖 - UIView

    iOS系列 基础篇 05 视图鼻祖 - UIView 目录: UIView“家族” 应用界面的构建层次 视图分类 最后 在Cocoa和Cocoa Touch框架中,“根”类时NSObject类.同样, ...

  6. Django基础十之Form和ModelForm组件

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

  7. 12.Django基础十之Form和ModelForm组件

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

  8. 01:django基础篇

    Django其他篇 目录: 1.1 django初探 1.2 第一个django项目 1.3 django render/redirect/HttpResponse 和 request.GET req ...

  9. Django学习系列之Form验证

    django表单基础 django表单分类 基于django.forms.Form:所有表单类的父类 基于django.forms.ModelForm:可以和模型类绑定的Form Form验证流程 定 ...

随机推荐

  1. 黑马lavarel教程---1、lavarel目录结构

    黑马lavarel教程---1.lavarel目录结构 一.总结 一句话总结: 一套视频讲的东西太少,要看多套视频 1.安装lavarel需要额外开启的模块? extension=php_filein ...

  2. tomcat的work目录的作用

    最近发现,很多网友喜欢把tomcat的work目录里的东西叫做缓存,其实那不是很恰当,work目录只是tomcat的工作目录,也就是tomcat把jsp转换为class文件的工作目录,这也正是为什么它 ...

  3. zay大爷的膜你题 D2T2——不老梦(AK梦)

    还是万年不变的外链 这个题.....是最难的....但是不知道为啥扶苏神仙讲完了之后我竟然听懂了.... 所以这个题我要好好写一写 首先我们看一看每一个测试点,来一点点得分 第一个测试点n = 1,直 ...

  4. kaptcha Spring 整合

    转自:http://my.oschina.net/CandyDesire/blog/209364 生成验证码的方式有很多,个人认为较为灵活方便的是Kaptcha ,他是基于SimpleCaptcha的 ...

  5. Linux监控命令之==>top

    一.命令说明 top 命令能够实时监控系统的运行状态,并且可以按照CPU.内存和执行时间进行排序,同时top 命令还可以通过交互式命令进行设定显示,通过top 命令可以查看即时活跃的进行. 二.参数说 ...

  6. 一种局部二值化算法:Sauvola算法

    之前接触过全局二值化(OTSU算法),还有OPENCV提供的自适应二值化,最近又了解到一种新的局部二值化算法,Sauvola算法. 转载自:http://www.dididongdong.com/ar ...

  7. 【HANA系列】SAP HANA SQL获取本周的周一

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[HANA系列]SAP HANA SQL获取本周 ...

  8. python中的序列化和反序列化

    ~~~~~~滴滴,,什么是序列呢?可以理解为序列就是字符串.序列化的应用 写文件(数据传输) 网络传输 序列化和反序列化的概念   序列化模块:将原本的字典.列表等内容转换成一个字符串的过程就叫做序列 ...

  9. linux下 sleep() 与 usleep()

    usleep() 将进程挂起一段时间, 单位是微秒(百万分之一秒): 头文件: unistd.h 语法: void usleep(int micro_seconds); 返回值: 无 内容说明:本函数 ...

  10. Mac021--编辑软件

    一.思维导图MindNode 知乎Mac常用的思维导图:https://zhuanlan.zhihu.com/p/37768277 MindNode下载地址:https://macblcom.ctfi ...