Django组件--forms组件(注册用)
一、forms组件--校验类的使用
二、form组件--校验类的参数
三、forms组件校验的局部钩子--自定义校验规则(要看源码理解)
四、forms组件校验的全局钩子--校验form表单两次密码输入是否一致
五、forms组件的渲染标签功能(推荐方式二)
一、forms组件--校验类的使用
1、校验字段功能(最核心功能)
示例1:
在服务端进行格式校验
-------这个写在一个新模块里-------------
from django import forms
class UserForm(forms.Form): #新建一个校验类
name = forms.CharField(min_length) #必须为字符串,最小4位
email = forms.EmailField() #邮箱校验
--------------------------------------------------
-------视图函数里的用户注册方法-------
def register(request):
# 字典的键必须跟校验类里的字段一样
form=UserForm({"name":"yuan","email":"123"})
# 开始校验,所有校验类里的值校验通过返回True,否则返回False
# 字典里有多少个无所谓,只要校验类里的字段通过就是True
bool = form.is_valid()
# cleaned_data 这里面放所有校验通过的键值
form.cleaned_data
# errors 这里面放所有未通过的键值 是仿字典类型
# 例如name没通过,要取errors里的错误信息:form.errors["name"][0]
form.errors
return HttpResponse(request, "ok")
------------------------------------------------------
完整示例:
def register(request):
#校验类字段要跟前端form表单一样
form=UserForm(request.POST)
if form.is_valid():
clean = form.cleaned_data
else:
clean = form.cleaned_data
errors = form.errors
-------------------------------------------------
总结:
1.注意前端form表单内的需要校验的属性名称,要跟后端校验类的字段一致
2. 掌握is_valid() 、 cleaned_data、 errors各自含义
二、form组件--校验类的参数
如果想改渲染的标签类型为password:widgets.PasswordInput
如果想改错误提示信息:error_messages参数
如果需要给渲染的标签加样式类, 就要加属性键值对,什么都行:widget=widgets.TextInput(attrs={"class":"form-control"})
from django.forms import widgets
class UserForm(forms.Form):
name = forms.CharField(min_length=4, label="用户名", error_messages={"required":"不能为空","invalid":"格式错误"}) #错误类型不能改其他名字
pwd = forms.CharField(min_length=4, label="密码",widget=widgets.PasswordInput(attrs={"class":"form-control"}))
r_pwd = forms.CharField(min_length=4, label="确认密码")
email = forms.EmailField(label="邮箱",widget=widgets.TextInput(attrs={"class":"form-control"})) # 给标签加属性
tel = forms.CharField(label="电话")
三、forms组件校验的局部钩子--自定义校验规则(要看源码理解)
第二层校验:clean_xx方法,校验通过返回该值,否则抛ValidationError异常
------------------------------------------------------------------------------------
from django.core.exceptions import ValidationError
class UserForm(forms.Form):
name = forms.CharField(min_length=4, label="用户名")
pwd = forms.CharField(min_length=4, label="密码")
r_pwd = forms.CharField(min_length=4, label="确认密码")
email = forms.EmailField(label="邮箱")
tel = forms.CharField(label="电话")
#该功能验证用户名是否已被注册
def clean_name(self):
name = self.cleaned_data.get("name")
ret = UserInfo.objects.filter(name=name)
if not ret:
return name
else:
#只能抛这个错误类型
raise ValidationError("该用户已注册")
----------------------------------------------------------------------------------------
四、forms组件校验的全局钩子--校验form表单两次密码输入是否一致
在校验类里,覆盖父类clean方法
获取全局钩子错误(在模板里渲染):form.errors.get("__all__")[0]
def clean():
# 先从cleaned_data中取要联合校验的字段
pwd=self.cleaned_data.get('pwd')
r_pwd=self.cleaned_data.get('r_pwd')
if pwd and r_pwd:
# pwd跟r_pwd之前的校验已通过,才验证全局钩子
if pwd==r_pwd:
# 这里面包括pwd和r_pwd
return self.cleaned_data
else:
raise ValidationError('两次输入密码不一致')
else:
# 这里面包括pwd和r_pwd两者之一,或者都不包括
return self.cleaned_data
五、forms组件的渲染标签功能(推荐方式二)
渲染方式三种、错误信息的渲染方式
1、渲染方式一
先写后端校验类,再在前端渲染,charFiled渲染成input标签:
# 校验类
class UserForm(forms.Form):
name = forms.CharField(min_length=4)
pwd = forms.CharField(min_length=4)
r_pwd = forms.CharField(min_length=4)
email = forms.EmailField()
tel = forms.CharField()
# 视图函数:用户注册
def reg(request):
form = UserForm(request.POST)
return render("reg_html",{"form":form})
为了方便,Django可以在前端按照后端写的校验类进行渲染
<form>
{% csrf_token %}
用户名:{{ form.name }}
密码:{{ form.pwd }}
确认密码:{{ form.r_pwd }}
邮箱:{{ form.email }}
电话:{{ form.tel }}
<input type="submit">
</form>
2、渲染方式二:如果字段很多
class UserForm(forms.Form):
name = forms.CharField(min_length=4, label="用户名")
pwd = forms.CharField(min_length=4, label="密码")
r_pwd = forms.CharField(min_length=4, label="确认密码")
email = forms.EmailField(label="邮箱")
tel = forms.CharField(label="电话")
def reg(request):
form = UserForm(request.POST)
return render("reg_html",{"form":form})
-------------------------------
<form>
{% csrf_token %}
{% for field in form %}
<div>
<label for="">{{ field.label }}</label> {{ field }}
</div>
{% endfor %}
<input type="submit">
</form>
-------------------------------
3、渲染方式三,自己搞着玩可以
<form>
{% csrf_token %}
{{ form.as_p }}
<input type="submit">
</form>
4、渲染错误信息
-------视图函数------
def register(request):
if request.method=="POST":
form=UserForm(request.POST)
if form.is_valid():
clean = form.cleaned_data
else:
clean = form.cleaned_data
errors = form.errors
# NOTES:这里返回的页面可以保存用户上次已经填过的数据,还包括错误信息
return render("reg_html",{"form":form})
#如果是get请求,渲染空form页面
form=UserForm()
return render(request,"reg_html",{"form":form})
------------------------------
<form>
{% csrf_token %}
{% for field in form %}
<div>
<label for="">{{ field.label }}</label>
{{ field }}
<span>{{ field.errors.0 }}</span>
</div>
{% endfor %}
<input type="submit">
</form>
--------------------------------
Django组件--forms组件(注册用)的更多相关文章
- python 全栈开发,Day78(Django组件-forms组件)
一.Django组件-forms组件 forms组件 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显 ...
- django第13天(auth组件,forms组件,中间件,csrf)
django第13天(auth组件,forms组件) auth组件 -auth组件 -auth是什么? -django内置的用户认证系统,可以快速的实现,登录,注销,修改密码.... -怎么用? -( ...
- Django组件-Forms组件
Django的Forms组件主要有以下几大功能: 页面初始化,生成HTML标签 校验用户数据(显示错误信息) HTML Form提交保留上次提交数据 一.小试牛刀 1.定义Form类 from dja ...
- django之forms组件
在django中forms组件有其强大的功能,里面集合和众多的函数和方法:下面来看一下它的源码 """ Form classes """ f ...
- 08 Django组件-Forms组件
Django的Forms组件主要有以下几大功能: 页面初始化,生成HTML标签 校验用户数据(显示错误信息) HTML Form提交保留上次提交数据 一.小试牛刀 1.定义Form类 from dja ...
- web框架开发-Django的Forms组件
校验字段功能 针对一个实例:用户注册. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) ...
- Django组件—forms组件
forms组件: 校验字段功能: 针对一个实例:注册用户. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_l ...
- Django组件——forms组件
一.校验字段功能 通过注册用户这个实例来学习校验字段功能. 1.模型:models.py from django.db import models # Create your models here. ...
- 12 Django组件-forms组件
forms组件 校验字段功能 针对一个实例:注册用户讲解. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_l ...
随机推荐
- Zara带你快速入门WPF(4)---Command与功能区控件
前言:许多数据驱动的应用程序都包含菜单和工具栏或功能区控件,允许用户控制操作,在WPF中,也可以使用功能区控件,所以这里介绍菜单和功能区控件. 一.菜单控件 在WPF中,菜单很容易使用Menu和Men ...
- TDX指标的理解与改造(价格到达指标线提醒)
目的:画线指标理解,并同时改造成条件选股指标. 参考:https://mp.csdn.net/postedit/83176406 #ff7700 hex color https://www.colo ...
- Zuul介绍
1. Zuul是什么 Zuul是所有从设备和web站点到Netflix流媒体应用程序后端请求的前门.作为一个边缘服务应用程序,Zuul被构建来支持动态路由.监视.弹性和安全性.它还可以根据需要将请求 ...
- Python爬虫入门教程 36-100 酷安网全站应用爬虫 scrapy
爬前叨叨 2018年就要结束了,还有4天,就要开始写2019年的教程了,没啥感动的,一年就这么过去了,今天要爬取一个网站叫做酷安,是一个应用商店,大家可以尝试从手机APP爬取,不过爬取APP的博客,我 ...
- PC逆向之代码还原技术,第三讲汇编中加法的代码还原
目录 PC逆向之代码还原技术,第三讲汇编中加法的代码还原 一丶汇编简介 二丶高级代码对应汇编观看. 1.代码还原解析: 总结 PC逆向之代码还原技术,第三讲汇编中加法的代码还原 一丶汇编简介 在讲解加 ...
- REST API设计指导——译自Microsoft REST API Guidelines(三)
前面我们说了,如果API的设计更规范更合理,在很大程度上能够提高联调的效率,降低沟通成本.那么什么是好的API设计?这里我们不得不提到REST API. 关于REST API的书籍很多,但是完整完善实 ...
- -1-7 java 网络编程基本知识点 计算机网络 TCP/IP协议栈 通信必备 tcp udp
计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来, 在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统. 网络编程 ...
- Spring Boot 2.x(三):搭建开发环境(整合Spring Data JPA)
为什么是JPA JPA虽然小众,但是足够优雅╮(╯_╰)╭,由于微服务的兴起,服务粒度的细化,多表联合的场景逐渐减少,更多的是一些简单的单表查询,而这正是JPA的强项所在.所以,以后的实战项目中我也会 ...
- k8s重要概念及部署k8s集群(一)--技术流ken
重要概念 1. cluster cluster是 计算.存储和网络资源的集合,k8s利用这些资源运行各种基于容器的应用. 2.master master是cluster的大脑,他的主要职责是调度,即决 ...
- 第23章 Windows身份验证 - Identity Server 4 中文文档(v1.0.0)
在支持的平台上,您可以使用IdentityServer使用Windows身份验证对用户进行身份验证(例如,针对Active Directory).当前使用以下命令托管IdentityServer时,W ...