一.Django的forms组件应用场景
1.应用
- 一般应用于前端的登入、注册界面, 对用户输入的字段进行校验, 快速的判断用户输入的内容是否合法, 并返回信息
2.为何不在前端直接使用JS进行校验
- 前端的校验可以没有, 但后端的校验必须要有
- 因为前端的校验弱不禁风, 有很多种方式可以伪装成浏览器发送请求传递数据
- 或者通过爬虫程序绕过前端页面直接朝后端提交数据
二.forms组件的基本使用(步骤)
- 导入forms组件
- 定义一个类, 并继承Form
- 在类中书写要校验的字段, 字段的属性就是要校验的规则
- 实例化得到一个Form对象, 把要校验的数据传入
- 调用
[form对象].is_valid( )方法进行校验, 校验通过返回**True - 校验通过调用
[form对象].cleaned_data获得校验后的数据 - 校验失败调用
[form对象].errors获得错误信息
三.forms组件基本使用示例
简单的用户注册界面示例
1.常用字段属性
| 属性 | 释义 |
|---|---|
| min_length | 最小长度 |
| max_length | 最大长度 |
| require | 该字段必须得填 |
| label | 该字段的标签 |
2.组件文件 form.py
-
建议在应用文件夹下创建一个专门存放forms组件的文件 (不创建直接写在views.py中也可以)
-
导入组件并创建类
from django import forms
class RegisterForm(forms.Form):
# 校验name字段,最大长度为8,最短为3,下面的字段类似
name = forms.CharField(max_length=8, min_length=3, lable='用户名')
password = forms.CharField(max_length=10, min_length=4, lable='密码')
re_password = forms.CharField(max_length=10, min_length=4, lable='确认密码')
email = forms.EmailField(lable='邮箱')
3.视图层 views.py 文件
- 实例forms对象, 使用对方法进行校验
from app01.myform import RegisterForm
def register(request):
if request.method == 'POST':
# 实例得到form对象,将需要校验的数据传入(数据可以是前端传过来的数据,也可以是自己后端已有的数据)
# dic = {'name':'shawn','password':'1111','re_password':'1111','email':'123@qq.com'}
# form_data = RegisterForm(dic) # 示例:直接将已有的数据传入
form_data = RegisterForm(request.POST) # 将前端post请求的数据传入
# 进行校验 is_valid()
if form_data.is_valid():
print('校验成功')
# 获得校验成功的数据 cleaned_data
print(form_data.cleaned_data)
return HttpResponse('校验成功')
else:
print('检验失败')
# 获得检验失败的错误提示 errors
print(form_data.errors)
# forms组件可以自动生成HTML代码,因此可以直接在页面上进行显示
form_data = RegisterForm() # 先产生form空对象,再将其传给前端
return render(request, 're_form.html', {
'form': form_data})
ps :
cleaned_data属性必须是经过is_valid( )校验之后才产生的, 在校验之前使用会报错 : 属性不存在
4.路由层 urls.py 文件
re_path('^re_form/', views.register)
5.模板层 re_form.html 文件
<div class="container">
<div class="row">
<div class="col-md-4">
<div class="panel panel-info">
<div class="panel-heading">注册页面</div>
<div class="panel-body">
<form action="" method="post">
<p>用户名:{
{
form.name }}</p>
<p>密码:{
{
form.password }}</p>
<p>确认密码:{
{
form.re_password }}</p>
<p>邮箱:{
{
form.email }}</p>
<br>
<input type="submit" class="btn btn-block btn-success" value="注册">
</form>
</div>
</div>
</div>
</div>
</div>
6.测试效果
- 检验失败展示

- 检验成功展示

四.forms组件之渲染标签方式
1.自动渲染方式一
- 就是上面示例中的写法
- 可扩展性很强, 但是需要书写的代码太多

本文详细介绍Django框架中的Forms组件使用方法,包括基本应用场景、校验规则设定、错误信息处理、自定义钩子函数等内容,并提供实际示例。
最低0.47元/天 解锁文章
1224

被折叠的 条评论
为什么被折叠?



