第十三章 Django框架学习——forms组件
一、forms组件介绍
二、字段校验功能
三、渲染标签功能
四、组件的参数配置
五、局部钩子
六、全局钩子
一、forms组件介绍
我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。
【普通版注册】
之前web开发的模式,以注册为例:
- 要有一个注册的页面,页面里面要有form表单
- form表单要能提交数据到后端,后端要做有效性校验
- 要把校验的提示信息展示在页面上
与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确。如果用户输入的内容有错误就需要在页面上相应的位置显示对应的错误信息.。
【forms组件功能】
Django form组件就实现了上面所述的功能,其实form组件的主要功能如下:
- 生成页面可用的HTML标签(渲染标签)
- 对用户提交的数据进行校验(字段校验)
- 保留上次输入内容
【forms组件其实就是实现了普通版注册的功能】
之前web开发的模式,以注册为例:
- 要有一个注册的页面,页面里面要有form表单 --> 生成HTML代码
- form表单要能提交数据到后端,后端要做有效性校验 --> 数据有效性校验
- 要把校验的提示信息展示在页面上 --> 校验信息返回并展示,保存原来填写的内容
关于前后端校验的必要性:
1.前端通过js代码做校验——》最好要有(因为浏览器可以禁用js,可以被跳过)
2.后端校验——》必须要有
二、字段校验功能
普通的注册功能实现
# 注册 def register(request): error_msg = "" if request.method == "POST": username = request.POST.get("name") pwd = request.POST.get("pwd") # 对注册信息做校验 if len(username) < 6: # 用户长度小于6位 error_msg = "用户名长度不能小于6位" else: # 将用户名和密码存到数据库 return HttpResponse("注册成功") return render(request, "register.html", {"error_msg": error_msg})
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>注册页面</title> </head> <body> <form action="/reg/" method="post"> {% csrf_token %} <p> 用户名: <input type="text" name="name"> </p> <p> 密码: <input type="password" name="pwd"> </p> <p> <input type="submit" value="注册"> <p style="color: red">{{ error_msg }}</p> </p> </form> </body> </html>
forms组件实现注册功能
1.导入模块
from django import forms
2.创建一个类
from django import forms # 按照Django form组件的要求自己写一个类 class RegForm(forms.Form): name = forms.CharField(label="用户名") pwd = forms.CharField(label="密码")
3.写视图函数
# 使用form组件实现注册方式 def register2(request): form_obj = RegForm() if request.method == "POST": # 实例化form对象的时候,把post提交过来的数据直接传进去 form_obj = RegForm(request.POST) # 调用form_obj校验数据的方法 if form_obj.is_valid(): return HttpResponse("注册成功") return render(request, "register2.html", {"form_obj": form_obj})
4.写register.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>注册2</title> </head> <body> <form action="/reg2/" method="post" novalidate autocomplete="off"> {% csrf_token %} <div> <label for="{{ form_obj.name.id_for_label }}">{{ form_obj.name.label }}</label> {{ form_obj.name }} {{ form_obj.name.errors.0 }} </div> <div> <label for="{{ form_obj.pwd.id_for_label }}">{{ form_obj.pwd.label }}</label> {{ form_obj.pwd }} {{ form_obj.pwd.errors.0 }} </div> <div> <input type="submit" class="btn btn-success" value="注册"> </div> </form> </body> </html>
看网页效果发现 也验证了form的功能:
• 前端页面是form类的对象生成的 -->生成HTML标签功能
• 当用户名和密码输入为空或输错之后 页面都会提示 -->用户提交校验功能
• 当用户输错之后 再次输入 上次的内容还保留在input框 -->保留上次输入内容
三、渲染标签功能
四、组件的参数配置
五、局部钩子
六、全局钩子