Django之form模板的使用
form模块的简介与用处
1.form 是前后端交互的一种方式, form表单提交的一种,django中有一个模块是form他主要用处就过滤前端form提交的数据
1. forms 模块是处理前后台的页面渲染作用:
2. forms 可以吧后端的异常处理反馈给前端消息,还可以设置用户输入的匹配法则, 有局部钩子做过滤,还有全局钩子做过滤
2.forms 模块检测前端提交的数据是否合法, 可以自定义局部钩子和全局钩子进行判断
后端:
from django import forms
class CheckForm2(forms.Form):
# 校验需求:账号必须不能以数字开头
usr = forms.CharField(min_length=3, max_length=10, label="账号:",
error_messages={
'required': "必填项",
'min_length': "最少3",
'max_length': "最多10"
})
pwd = forms.CharField(min_length=3, max_length=10, label="密码:",
error_messages={
'required': "必填项",
'min_length': "最少3",
'max_length': "最多10"
},
widget=forms.PasswordInput(attrs={
'class': 'pwd', #定义class
'placeholder': '请输入密码' #设置默认提示
})
)
re_pwd = forms.CharField(min_length=3, max_length=10, label="确认:",
error_messages={
'required': "必填项",
'min_length': "最少3",
'max_length': "最多10"
},
widget=forms.PasswordInput) #设置成密文输入
email = forms.EmailField(label="邮箱:",
error_messages={
'invalid': "格式不正确",
'required': "必填项"
}
) # 局部钩子:对usr进行局部钩子的校验,该方法会在usr属性校验通过后,系统调用该方法继续校验
def clean_usr(self):
cleaned_usr = self.cleaned_data.get('usr', None) # type: str
# 通过正则匹配不能以数字开头
import re
if re.match('^[0-9]', cleaned_usr):
from django.core.exceptions import ValidationError
raise ValidationError('不能以数字开头')
return cleaned_usr # 全局钩子:代表校验类中的所有属性校验通过后,系统调用该方法继续校验
def clean(self):
cleaned_pwd = self.cleaned_data.get('pwd', None)
cleaned_re_pwd = self.cleaned_data.get('re_pwd', None)
if cleaned_pwd != cleaned_re_pwd:
from django.core.exceptions import ValidationError
raise ValidationError('两次密码不一致')
return self.cleaned_data def register2(request):
if request.method == "GET":
check_form2 = CheckForm2() #这里一定要生成空对象,不然前端东西无法看到,渲染到
if request.method == "POST":
check_form2 = CheckForm2(request.POST)
if check_form2.is_valid():
return HttpResponse('注册成功')
else:
print(check_form2.errors.as_data) #这个是局部的,把后端的报错信息渲染给前端, 这个单个属性
all_error = check_form2.errors.get('__all__') #把后端的报错信息渲染给前端页面显示 ,全局都能显示出来
return render(request, 'register2.html', locals())
后端的视图函数案例
{#渲染方式二#}
<form action="" method="post" novalidate>
{% for ele in check_form2 %} //循环列表中的对象//
<p>
<label for="">{{ ele.label }}</label> /对象的label标签属性显示
{{ ele }}
<span style="color: red;">{{ ele.errors.0 }}</span> /去数组中的第一个就对了/ j
{% if ele == check_form2.re_pwd %}
<span style="color: red;">{{ all_error.0 }}</span> /设置特定的报错信息渲染/
{% endif %}
</p>
{% endfor %}
<input type="submit" value="注册">
</form>
<hr>
{#渲染方式一#}
<form action="" method="post" novalidate>
<p>
<label for="id_usr">账号:</label>
{{ check_form2.usr }}
</p>
<p>
<label for="id_pwd">密码:</label>
{{ check_form2.pwd }}
</p>
<p>
<label for="id_re_pwd">确认:</label>
{{ check_form2.re_pwd }}
</p>
<p>
<label for="id_email">邮箱:</label>
{{ check_form2.email }}
</p>
<input type="submit" value="注册">
</form>
</body>
</html>
前端的页面渲染处理
#主要作用就是进行用户注册进行二次过滤, 比如不能数字开头,确认密码与第一次输入密码是否一致等等!!!
Django之form模板的使用的更多相关文章
- Django之Form组件
Django之Form组件 本节内容 基本使用 form中字段和插件 自定义验证规则 动态加载数据到form中 1. 基本使用 django中的Form组件有以下几个功能: 生成HTML标签 验证用户 ...
- Django基础——Form&Ajax篇
一 Form 在实际的生产环境中,登录和注册时用户提交的数据浏览器端都会使用JavaScript来进行验证(比如验证输入是否为空以及输入是否合法),但是浏览器可能会禁用JavaScirpt,同时也有人 ...
- 第十一篇:web之Django之Form组件
Django之Form组件 Django之Form组件 本节内容 基本使用 form中字段和插件 自定义验证规则 动态加载数据到form中 1. 基本使用 django中的Form组件有以下几个功 ...
- Django的Form
Django的Form有两个基本用途: 1.用于生成html的Form表单 2.用于后台做表单验证 #!/usr/bin/env python # -*- coding:utf-8 -*- impor ...
- Django之Form、ModelForm 组件
Django之Form.ModelForm 组件 一.Form组件: django框架提供了一个form类,来处理web开发中的表单相关事项.众所周知,form最常做的是对用户输入的内容进行验证,为此 ...
- Django Model Form
ModelForm ModelForm结合了Form和Model,将models的field类型映射成forms的field类型,复用了Model和Model验证, 写更少的代码,并且还实现了存储数据 ...
- WEB框架Django之Form组件
Django的Form主要具有一下几大功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显示内容 一 通过form实现校验字段功能 模型:mod ...
- Django学习---Form组件认证
Form组件认证 能够帮助我们做用户认证. 以前写我们自己写用户认证的时候,我们自己写HTML的form表单,点击提交,数据就被发送到后台,后台进行验证.在验证过程中我们就需要自己去写正则表达式去匹配 ...
- Django框架之模板语法【转载】
Django框架之模板语法 一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django ...
随机推荐
- 安装pitchpork 及 pacbioscience 的问题及解决
1. error while loading shared libraries: libpbbam.so: cannot open shared 解决: find -name libpbbam.so ...
- 【转】20-TCP 协议(滑动窗口——基础)
https://blog.csdn.net/q1007729991/article/details/70142341 相信大家都遇到过这样的场景: 同学 Luffy 给你打电话,让你记下一串手机号码, ...
- hadoop day 5
1.Zookeeper Zookeeper的安装和配置(集群模式) 1)在conf目录下创建一个配置文件zoo.cfg, tickTime=2000——心跳检测的时间间隔(ms) dataDir=/U ...
- UA池和代理池
scrapy下载中间件 UA池 代理池 一.下载中间件 先祭出框架图: 下载中间件(Downloader Middlewares) 位于scrapy引擎和下载器之间的一层组件. - 作用: (1)引擎 ...
- Git删除分支/恢复分支
• 删除一个已被终止的分支 如果需要删除的分支不是当前正在打开的分支,使用branch -d直接删除 git branch -d <branch_name> • 删除一个正打开的分支 如 ...
- latex之注释快捷键
注释快捷键 ctrl+T:注释掉选中区域 ctrl_U:解除选中区域的注释
- 一个页面从输入url到加载完成的过程都发生了什么,请详细说明
1.首先,在浏览器地址栏中输入url 2.浏览器先查看浏览器缓存-系统缓存-路由器缓存,如果缓存中有,会直接在屏幕中显示页面内容.若没有,则跳到第三步操作 3.在发送http请求前,需要域名解析(DN ...
- 常见模块(四) os模块
注: os模块是实现python程序对操作系统(operation system)的操作 1.对文件或者目录进行删除或者创建的相关操作 # os.rename("b"," ...
- rabbitmq management advance lesson
rabbitmq management advance management install rabbitmq-plugins enable rabbitmq_management visit : h ...
- 使用vue自定义简单的消息提示框
<style scoped> /** 弹窗动画*/ a { text-decoration: none } .drop-enter-active { /* 动画进入过程:0.5s */ t ...