(32)forms组件(渲染自建规则:局部钩子函数和全局钩子函数)
要达成渲染自建规则
1、局部钩子函数(某个字段,自定意义规则,不如不能以sb开头,数据库已存在等)
2、全局钩子函数(校验两次密码是否一致)
3、使用css样式
register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="/static/bootstrap-3.3.7-dist/css/bootstrap.css">
<title>注册页面</title>
<style>
.errors {
color: red;
margin-left: 20px;
}
</style>
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-md-offset-3 col-md-6">
<h1>forms渲染页面,实现局部刷新</h1>
<form action="" method="post" novalidate>
{% csrf_token %}
{% for form in forms %}
<p>{{ form.label }}:{{ form }}<span class="errors">{{ form.errors.0 }}</span></p>
{% endfor %}
<input type="submit" value="提交"><span class="errors">{{ error }}</span>
</form>
</div>
</div>
</div> </body>
</html>
views.py
from django.shortcuts import render,HttpResponse
from django.core.exceptions import ValidationError
from django import forms
from django.forms import widgets #导入这个模块就是将前端表单里的类型修改,从后端修改前端的输入框类型 class RegForms(forms.Form):
# widget 就是定义前端输入框的类型,后面的引用就是widget后面的参数是指定输入框的格式,TextInput是一个类,传入的参数attrs是一个字典,可以利用这个参数给前端的标签取类名或者id名等等来实现引用bootstrap的样式
name = forms.CharField(min_length=3,max_length=8,label='用户名',error_messages={'min_length':'用户名太短','max_length': '用户名太长了','required':'该字段必填'},widget=widgets.TextInput(attrs={'class':'form-control'}))
pwd = forms.CharField(min_length=3,max_length=8,label='密码',error_messages={'min_length':'用户名太短','max_length': '用户名太长了','required':'该字段必填'},widget=widgets.PasswordInput(attrs={'class':'form-control'}))
re_pwd = forms.CharField(min_length=3,max_length=8,label='确认密码',error_messages={'min_length':'用户名太短','max_length': '用户名太长了','required':'该字段必填'},widget=widgets.PasswordInput(attrs={'class':'form-control'}))
email = forms.EmailField(label='邮箱',error_messages={'invalid':'格式不是邮箱格式','required':'该字段必填'},widget=widgets.EmailInput(attrs={'class':'form-control'})) '''局部校验,就是校验某个字段'''
'''写法固定,就是clean_字段名,就是重写字段校验规则的固定写法'''
def clean_name(self):
# self就是当前forms对象,cleand_data就是清洗后的数据,从字典中取出name
name = self.cleaned_data.get('name')
# 如果以sb为开头
if name.startswith('sb'):
# 这里要抛一个异常,而且是一个ValidationError,这个ValidationError是一个模块要导入
raise ValidationError('不能以sb开头')
else:
return name '''全局钩子函数(校验两次密码不一致),用clean函数这个是固定的,获取清洗后的数据,然后进行判断用raise抛异常即可'''
def clean(self):
pwd = self.cleaned_data.get('pwd') # 从清洗后的数据中获取pwd
re_pwd = self.cleaned_data.get('re_pwd')
if pwd == re_pwd:
return self.cleaned_data
else:
raise ValidationError('两次密码不一致') def register(request):
if request.method == 'GET':
forms = RegForms()
error=''
elif request.method == 'POST':
forms = RegForms(request.POST)
if forms.is_valid():
print('这里就是清洗后的数据: ',forms.cleaned_data)
return HttpResponse('注册成功')
else:
errors_dic = forms.errors
print(errors_dic)
print('这里就是错误的数据: ',forms.errors.as_data)
# 这里获取全局钩子函数的错误信息,就要用__all__,然后全局的错误信息可能是多个的,所以取最近的一个就是索引位是0的位置
error = forms.errors.get('__all__')[0] return render(request,'register.html',{'forms':forms,'error':error})
(32)forms组件(渲染自建规则:局部钩子函数和全局钩子函数)的更多相关文章
- django基础之day09,创建一个forms表单组件进行表单校验,知识点:error_messages,label,required,invalid,局部钩子函数,全局钩子函数, forms_obj.cleaned_data,forms_obj.errors,locals(), {{ forms.label }}:{{ forms }},{{ forms.errors.0 }}
利用forms表单组件进行表单校验,完成用户名,密码,确认密码,邮箱功能的校验 该作业包含了下面的知识点: error_messages,label,required,invalid,局部钩子函数,全 ...
- django基础之day09,Forms组件在程序中做了哪些事? 校验数据、渲染标签、展示信息
******************************* Forms组件 *************************************************** Forms组件在 ...
- 1203 forms组件
目录 昨日内容 多对多三种创建方式 1.全自动 好处 缺点 2.纯手动 好处 缺点 3.半自动through='',through_fields=(外键字段) 好处 缺点 forms组件 1.简单引入 ...
- 多对多关系表的创建方式、forms组件
目录 多对多关系表的三种创建方式 1.全自动,Django自动创建 2.纯手撸 3.半自动(推荐使用) forms组件 小例子 forms组件 校验器 钩子函数 局部钩子 全局钩子 forms组件常用 ...
- 多对多三种创建方式、forms组件、cookies与session
多对多三种创建方式.forms组件.cookies与session 一.多对多三种创建方式 1.全自动 # 优势:不需要你手动创建第三张表 # 不足:由于第三张表不是你手动创建的,也就意味着第三张表字 ...
- web框架开发-Django的Forms组件
校验字段功能 针对一个实例:用户注册. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) ...
- python 全栈开发,Day78(Django组件-forms组件)
一.Django组件-forms组件 forms组件 django中的Form组件有以下几个功能: 生成HTML标签 验证用户数据(显示错误信息) HTML Form提交保留上次提交数据 初始化页面显 ...
- 03、 forms组件
1.校验字段功能 1.reg页面准备 models from django.db import models class UserInfo(models.Model): useranme = mode ...
- Django组件——forms组件
一.校验字段功能 通过注册用户这个实例来学习校验字段功能. 1.模型:models.py from django.db import models # Create your models here. ...
随机推荐
- python requests 上传文件
token="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJkYXRhIjoiZWM2ZWFjZjFjM2UzYzEyOWU3ODA4YjgwNzkxNGI ...
- Java自带RPC实现,RMI框架入门
Java自带RPC实现,RMI框架入门 首先RMI(Remote Method Invocation)是Java特有的一种RPC实现,它能够使部署在不同主机上的Java对象进行通信与方法调用,它是一种 ...
- js没事干应该瞧瞧的一些博客
https://zhidao.baidu.com/question/1736568808722198187.html http://www.cnblogs.com/webpush/p/4963002. ...
- HDU - 1061-快速幂签到题
快速幂百度百科:快速幂就是快速算底数的n次幂.其时间复杂度为 O(log₂N), 与朴素的O(N)相比效率有了极大的提高. HDU - 1061 代码实现如下: import java.util.Sc ...
- DOMContentLoaded方法
document.addEventListener('DOMContentLoaded',function(){ alert("SSDD") },false);
- PAT 1084 Broken Keyboard
1084 Broken Keyboard (20 分) On a broken keyboard, some of the keys are worn out. So when you type ...
- SVN 常见报错
1.svn is out of date 出错原因:SVN服务器端的版本比你的版本要新,不允许提交. 解决方案1:右键你所要提交的文件,team-->update 更新最新版本 然后再提 ...
- spring注入3种方式
1.构造方法 2.接口注入 3.set方法
- Jmeter对HTTP请求压力测试、并发测试的简单使用方法
对于服务器性能测试这块的经验更是少得可以忽略.迫使不得不让我们去尝试了解测试的知识. 首先我们的需求场景如下: 服务器硬件:(只有一台) 系统:Windows 2003 WebServer:Tomca ...
- tensorFlow(四)浅层神经网络
tensorFlow见基础 实验 MNIST数据集介绍 MNIST是一个手写阿拉伯数字的数据集. 其中包含有60000个已经标注了的训练集,还有10000个用于测试的测试集. 本次实验的任务就是通过手 ...