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 ...
随机推荐
- 关于Gradle2.0的翻译说明
Gradle1.12的翻译情况 Gradle实际上在4月16日就已经在对应的OmegaT项目上完成了翻译,后因项目繁忙,直到7月20日才完成了Github上Gradledoc项目及七牛站点的更新. 总 ...
- Mac设置SVN:Cornerstone3
前因 在windows下用Tortoisesvn.可惜Tortoisesvn没有Mac版,只能上知乎寻找适合于 Mac的SVN软件. 经过 找到了一款名为Cornerstone的软件.在App Sto ...
- MySQL 5.7笔记
1. 初始化 重命名my-default.ini为my.ini 添加character_set_server=utf8 运行mysqld --initialize 2. 重置密码 服务器运行: mys ...
- PHP中echo(),print(),print_r()之间的区别?
echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) print只能打印出简单类型变量的值(如int,string) print_r可以打印出复杂类 ...
- Eclipse中注释方法操作(两种)
Eclipse 中的两种注释方法:(1)多行注释 /* */ (2)单行注释 // 多行注释操作方法. 选中注释部分-菜单栏右上角 source: Add block comment.必须选中需要注释 ...
- eclipse添加propedit插件
1.propedit插件 这个插件基本上可以支持各种语言的转换. 2.方法如下: “help”--“Install new software”--“add” name:propedit Locatio ...
- js 时间date格式化
js中没有类似java中的DateFormat类来处理日期格式化,可以自己写一个: var newDate=new Date(); var year=newDate.getFullYear(); va ...
- flask第十七篇——模板【1】
从这一节开始我们就正式进入flask一个重要的模块——模板了. 我们平时看的知乎平台就是Python开发的,可以看到他的很多页面布局都是一样的,比如你现在搜“如何自学Python”,去知乎看他的页面是 ...
- python字符串常用
参考这一篇: http://www.runoob.com/python/python-strings.html
- python模块--如何相互调用自己写的模块
一.模块相互调用同级目录调用时的两种方法 import module print(module.add(3,8)) from module import add print(add(2,4)) 同级目 ...