Django Form表单实战:从原生HTML到类验证的完整流程
本文详解Django中Form表单的使用,对比原生HTML按钮与Django Form类的差异。通过实例演示如何创建视图类、实例化Form对象并在前端渲染,重点讲解is_valid()方法与cleaned_data的使用,实现数据提交与错误处理,帮助开发者掌握Django表单验证的核心机制。
HTML原生Form按钮行为解析
在HTML表单中,button按钮的行为取决于其定义方式。
直接使用<button>标签并放置于form内部时,默认具备提交功能,点击后会触发form数据的提交事件。
若使用<input type="button">定义按钮,则它仅是一个普通交互元素,不具备默认的提交行为,需要额外绑定JavaScript事件才能触发提交。
处理表单数据时,系统首先根据URL路由匹配对应的视图函数。
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^login/', views.login),
]
视图函数负责接收请求并返回响应,通常包含对HTTP方法类型的判断。
def login(request):
if request.method == "POST":
return HttpResponse("OK!")
return render(request,"login.html")
前端页面通过渲染后端返回的模板,展示表单结构及用户交互界面。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/login/" method="post">
{# csrf_token 在前端会渲染出一个input标签,是一组键值对,键是csrfmiddlewaretoken,值是随机字符串,会随着下面的input标签一起提交,只有这种形式发送post的请求才能被接收,#}
{% csrf_token %}
<p>用户名:<input type="text" name="user"></p>
<p>密码:<input type="password" name="pwd"></p>
<input type="submit">
</form>
</body>
</html>
Django Form类的基本使用与渲染
上述流程展示了原生HTML Form表单的基本工作原理。
在Django框架中,推荐使用内置的Form类来管理表单,需在views模块中定义一个继承自django.forms.Form的类。
在视图函数中实例化该Form类,生成表单对象,并将字段映射到前端页面进行展示。
使用as_p方法可自动将所有后端字段渲染为段落格式,但定制性较差;更推荐通过对象属性直接指定字段,以实现更灵活的前端控制。
在views中定义Form类,明确各字段的类型与约束。
from django.shortcuts import render,HttpResponse
# Create your views here.
#使用django的form类
from django import forms
class LoginForm(forms.Form):
user = forms.CharField()
pwd = forms.CharField()
def login(request):
if request.method == "POST":
return HttpResponse("OK!")
form_obj = LoginForm() -------------------实例化对象,
return render(request,"login.html",{"form_obj":form_obj}) ---传到前端显示
前端接收后端传递的Form对象,并通过模板语法渲染出对应的输入控件。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/login/" method="post">
{# csrf_token 在前端会渲染出一个input标签,是一组键值对,键是csrfmiddlewaretoken,值是随机字符串,会随着下面的input标签一起提交,只有这种形式发送post的请求才能被接收,#}
{% csrf_token %}
<p>用户名:{{ form_obj.user }}</p> ------------
<p>密 码:{{ form_obj.pwd }}</p> -------------------
<input type="submit">
</form>
</body>
</html>
检查前端生成的HTML元素,确认字段是否正确渲染为input标签。

Django表单数据验证机制
前端允许用户输入数据,但后端必须对提交的数据进行合法性验证。
调用is_valid()方法验证数据,若通过则通过cleaned_data获取清洗后的字典数据;若未通过,则通过errors属性查看具体的错误信息。
#使用django的form类
from django import forms
class LoginForm(forms.Form):
user = forms.CharField(max_length=9,min_length=5,error_messages={"required":"必填"})
pwd = forms.CharField()
def login(request):
if request.method == "POST":
#post的请求验证
formobj = LoginForm(request.POST)#拿到所有的提交数据
if formobj.is_valid():#都符合字段要求,
#取出所有符合字段要求的数据,用cleaned_data
print(formobj.cleaned_data)#拿到字典格式的数据
else:
print(formobj.errors)#如果是提交错误的数据,用errors
return HttpResponse("OK!")
form_obj = LoginForm()
return render(request,"login.html",{"form_obj":form_obj})
以上内容涵盖了Django Form表单的核心用法,旨在协助读者深入理解并应用于实际开发中,欢迎持续关注以获取更多技术支持。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













