Django组件—forms组件
forms组件:
校验字段功能:
针对一个实例:注册用户。
模型:models.py
class UserInfo(models.Model):
name=models.CharField(max_length=32)
pwd=models.CharField(max_length=32)
email=models.EmailField()
tel=models.CharField(max_length=32)
模板:register.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title> </head>
<body> <form action="" method="post">
{% csrf_token %}
<div>
<label for="user">用户名</label>
<p><input type="text" name="name" id="name"></p>
</div>
<div>
<label for="pwd">密码</label>
<p><input type="password" name="pwd" id="pwd"></p>
</div>
<div>
<label for="r_pwd">确认密码</label>
<p><input type="password" name="r_pwd" id="r_pwd"></p>
</div>
<div>
<label for="email">邮箱</label>
<p><input type="text" name="email" id="email"></p>
</div>
<input type="submit">
</form> </body>
</html>
视图函数:register
# forms组件
from django.forms import widgets wid_01=widgets.TextInput(attrs={"class":"form-control"})
wid_02=widgets.PasswordInput(attrs={"class":"form-control"}) class UserForm(forms.Form):
name=forms.CharField(max_length=32,
widget=wid_01
)
pwd=forms.CharField(max_length=32,widget=wid_02)
r_pwd=forms.CharField(max_length=32,widget=wid_02)
email=forms.EmailField(widget=wid_01)
tel=forms.CharField(max_length=32,widget=wid_01) def register(request): if request.method=="POST":
form=UserForm(request.POST)
if form.is_valid():
print(form.cleaned_data) # 所有干净的字段以及对应的值
else:
print(form.cleaned_data) #
print(form.errors) # ErrorDict : {"校验错误的字段":["错误信息",]}
print(form.errors.get("name")) # ErrorList ["错误信息",]
return HttpResponse("OK")
form=UserForm()
return render(request,"register.html",locals())
渲染标签功能:
渲染方式1:
<h3>渲染方式一</h3>
<form action="" method="post" novalidate>
{% csrf_token %}
{{ form.as_p }}
<input type="submit">
</form>
</body>
</html>
直接将form对象传入,然后通过.as_p方法可以将每一个字段都以input标签建成。
input标签前的名字,默认是字段名,若想显示为中文,则需要在字段属性中,添加lable.如:
class UserForm(forms.Form):
name = forms.CharField(min_length=4,label="姓名")
pwd = forms.CharField(max_length=16,label="密码")
age = forms.IntegerField(label="年龄")
tel = forms.CharField(label="电话")

渲染方式2:
<h3>渲染方式二</h3>
<form action="" method="post" novalidate>
{% csrf_token %}
<div>
<label for="">用户名</label>
{{ form.name }}
{# 一定要是form.字段名#}
</div>
<div>
<label for="">密码</label>
{{ form.pwd }}
</div>
<div>
<label for="">年龄</label>
{{ form.age }}
</div>
<div>
<label for="">电话</label>
{{ form.tel }}
</div>
<input type="submit">
</form>

渲染方式三:form表单外是加了一些bootstrap样式
<div class="container">
<div class="row">
<div class="col-md-8">
<form action="" method="post" novalidate>
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label for="">{{ field.label }}</label>
{{ field }}
</div>
{% endfor %}
<input type="submit">
</form>
</div>
</div>
</div>

显示错误与重置输入信息功能:
视图:
from django.shortcuts import render,HttpResponse,reverse,redirect # Create your views here. from app01.form import UserForm
def register(request):
if request.method == "POST":
form = UserForm(request.POST)
if form.is_valid():
print("######success#######")
print(form.cleaned_data)
print(form.errors)
print(type(form.errors))
return HttpResponse("添加成功")
else:
print("##########failed##########")
print(form.cleaned_data) # 正确的情况下会显示的字典。
print(form.errors) # 是一个字典。
print(form.errors.get("name")) # 拿到的是ul里面包着错误信息
print(form.errors.get("name")[0]) # 拿到的是错误信息
return render(request,"register.html",locals())
form = UserForm()
return render(request,"register.html",locals())
模板:
<div class="container">
<div class="row">
<div class="col-md-8 col-lg-offset-2">
<form action="" method="post" novalidate>
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label for="">{{ field.label }}</label>
{{ field }} <span class="errors pull-left">{{ field.errors.0 }}</span>
</div>
{% endfor %}
<div class="form-group">
<input type="submit" class=" btn btn-success btn-sm">
</div>
</form>
</div>
</div>
</div>
局部钩子与全局钩子:
模板:
from django import forms
from django.core.exceptions import ValidationError,NON_FIELD_ERRORS
from django.forms import widgets # widgets可以设置css样式 class UserForm(forms.Form):
name = forms.CharField(min_length=4,label="姓名",widget=widgets.TextInput(attrs=({"class":"form-control"})))
pwd = forms.CharField(max_length=16,label="密码",widget=widgets.PasswordInput(attrs=({"class":"form-control"})))
age = forms.IntegerField(label="年龄",widget=widgets.TextInput(attrs=({"class":"form-control"})))
tel = forms.CharField(label="电话",widget=widgets.TextInput(attrs=({"class":"form-control"}))) def clean_name(self): # 函数名格式必须是 clean_字段名。源码规定。
val = self.cleaned_data.get("name") # 从正确字典中获取name数据。
if not val.isdigit(): # 如果不是纯数字。
return val # 返回源数据。
else:
raise ValidationError('用户名不能是纯数字') # 否则就抛出错误。 def clean_pwd(self):
val = self.cleaned_data.get("pwd")
if len(val)>6:
return val
else:
raise ValidationError("密码不足6位") def clean_age(self):
val = self.cleaned_data.get("age")
if int(val)>=18:
return val
else:
raise ValidationError('未成年不得入内') def clean_tel(self):
val = self.cleaned_data.get("tel")
if int(val)==11:
return val
else:
raise ValidationError("手机号不合法")
视图:
<div class="container">
<div class="row">
<div class="col-md-8 col-lg-offset-2">
<form action="" method="post" novalidate>
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<label for="">{{ field.label }}</label>
{{ field }} <span class="errors pull-left">{{ field.errors.0 }}</span>
</div>
{% endfor %}
<div class="form-group">
<input type="submit" class=" btn btn-success btn-sm">
</div>
</form>
</div>
</div>
</div>
Django组件—forms组件的更多相关文章
- Django组件-Forms组件
Django的Forms组件主要有以下几大功能: 页面初始化,生成HTML标签 校验用户数据(显示错误信息) HTML Form提交保留上次提交数据 一.小试牛刀 1.定义Form类 from dja ...
- django之forms组件
在django中forms组件有其强大的功能,里面集合和众多的函数和方法:下面来看一下它的源码 """ Form classes """ f ...
- 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内置的用户认证系统,可以快速的实现,登录,注销,修改密码.... -怎么用? -( ...
- 08 Django组件-Forms组件
Django的Forms组件主要有以下几大功能: 页面初始化,生成HTML标签 校验用户数据(显示错误信息) HTML Form提交保留上次提交数据 一.小试牛刀 1.定义Form类 from dja ...
- Django组件--forms组件(注册用)
一.forms组件--校验类的使用 二.form组件--校验类的参数 三.forms组件校验的局部钩子--自定义校验规则(要看源码理解) 四.forms组件校验的全局钩子--校验form表单两次密码输 ...
- web框架开发-Django的Forms组件
校验字段功能 针对一个实例:用户注册. 模型:models.py class UserInfo(models.Model): name=models.CharField(max_length=32) ...
- 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 ...
随机推荐
- 当创建SDL工程发现“无法解析的外部符号 _SDL_main”出错
当你创建一个新控制台程序,想调用SDL时,编译时发现如下出错: 1>------ 已启动生成: 项目: caipal, 配置: Debug Win32 ------1> caipal.c ...
- EasyPlayerPro安卓流媒体播放器实现Android H.265硬解码流程
本文转自EasyDarwin团队成员John的博客:http://blog.csdn.net/jyt0551/article/details/74502627 H.265编码算法作为新一代视频编码标准 ...
- $timeout
$timeout 会在执行后刷新页面上 与angular 相关的变量,在于jQuery共用修改页面变量时,这很可能会导致刷新跳动的现象:
- UISegmentedControl字体大小,颜色,选中颜色,左边椭圆,右边直线的Button 解决之iOS开发之分段控制器UISegmentedControl
NSArray *segmentedArray = [NSArrayarrayWithObjects:STR(@"Mynews"),STR(@"Systemmes ...
- 汇编语言---键盘KeyCode值列表
键盘KeyCode值列表 收藏 keycode 0 =keycode 1 =keycode 2 =keycode 3 =keycode 4 =keycode 5 =keycod ...
- 在iOS上实现二维码功能
http://blog.csdn.net/abcmx/article/details/8011904 如今二维码随处可见,无论是实物商品还是各种礼券都少不了二维码的身影.而手机等移动设备又成为二维码的 ...
- oracle-分区(笔记)
partition by 用于指定分区方式 range 表示分区的方式是范围划分 partition pn 用于指定分区的名字 values less than 指定分区的上界(上限) ------- ...
- MySQL排序_20160926
在工作中对数据进行排序也是最常用的,比如根据用户的下单金额降序 或者对销售业绩进行降序排序 在考核员工KPI时候也经常用到 一.order by 函数 order by 函数默认根据后面字段升序,使 ...
- Python基础之路
一.Python基础之简介 二.Python基础之数据类型 三.Python之运算符 三.Python变量 四.Python之流程控制 三.Python基础之函数 四.Python基础之面向对象
- 关于fflush、缓冲区、scanf、EOF等问题真麻烦
1.为什么 fflush(stdin)是错的 http://u637.springnote.com/pages/6288463.xhtml(已经bad request了) 首先请看以下程序: #inc ...