Django Form表单实战:从原生HTML到类验证的完整流程

竹里
竹里
发布时间:2026-10-13 | 6人浏览过
原创

本文详解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表单的核心用法,旨在协助读者深入理解并应用于实际开发中,欢迎持续关注以获取更多技术支持。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表