一.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':'alex','password':'1111','re_password':'1111','email':'[email protected]'} # 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 文件
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>
标签:form,校验,forms,length,组件,data From: https://www.cnblogs.com/chen-ao666/p/16999450.html