Django表单与请求生命周期详解:从FBV到CBV及Form应用
本文深入解析Django中HTTP请求的完整生命周期,涵盖FBV(基于函数视图)与CBV(基于类视图)的处理流程。详细阐述URL路由匹配、中间件处理及视图函数执行机制,并介绍Django Form表单系统的核心概念、字段验证、数据清洗及文件上传实现,帮助开发者掌握Django后端开发的关键技术点。
Django请求生命周期概述
在Django框架中,理解HTTP请求的生命周期是掌握Web开发的基础。
需要明确的是,HTTP请求以及服务端响应中传输的所有数据,其底层格式均为字符串。
接下来我们将分步骤解析这一过程。
- 当用户在浏览器地址栏输入
url(网址)并回车时,浏览器会构建包含请求头和请求体的HTTP请求,并将其发送给服务器。 - 该
url(URL)请求首先经过wsgi(WSGI)接口处理,随后通过Django的中间件层,最终到达路由映射表。系统会在路由配置中逐条进行匹配,寻找对应的视图处理逻辑。 - 一旦路由匹配成功,视图函数会根据客户端发起的具体请求,查询或处理相应的数据,并准备返回响应。
- 最终,
Django框架通过Django(Django)将客户端期望获取的数据序列化为字符串,并作为HTTP响应返回给客户端浏览器。 - 客户端浏览器接收到服务器返回的数据后,对其进行解析和渲染,最终将页面内容展示给用户。
FBV
FBV视图处理流程
在Django中,一个url(URL)通常对应一个特定的视图函数,这种模式被称为FBV(Function Based View)。
当url(URL)匹配成功后,Django会直接调用并执行对应的视图函数来处理请求。
CBV
CBV视图处理流程
另一种模式是,一个url(URL)对应一个视图类,这种模式被称为CBV(Class Based View)。
当url(URL)匹配成功并定位到视图类后,Django会检查请求头中的Request.Method(Request.Method)字段。如果客户端以POST方式提交请求,则执行类中的post方法;如果以GET方式提交,则执行get方法。
以下是CBV模式下的具体处理步骤:
- 服务端接收包含
url(URL)和HTTP Method字段的请求,这两个关键信息在传输过程中均被视为字符串类型。 - 服务端通过路由映射表匹配成功后,会自动调用视图类的dispatch方法。
Django(Django)会通过dispatch方法利用反射机制,动态找到类中对应HTTP方法的具体实现函数并执行它。- 被调用的具体方法执行完毕后,会将处理结果或客户端想要的数据返回给dispatch方法。
- 最后,dispatch方法将接收到的数据封装成HTTP响应,返回给客户端。
Django Form表单系统详解
接下来介绍Django中的form表单系统。
关于Form表单的定义:
在Django(Django)的表单系统中,所有自定义的表单类都必须继承自django.forms.Form(django.forms.Form)基类。
Django(Django)提供了强大的表单系统,支持字段验证、数据清洗及错误处理等功能。
form_obj.as_p #在html网页渲染所有的字段
label #为一个标签添加id号
form_obj.字段 #渲染指定的字段
min_length #绑定字段的最短长度
max_length #绑定字段的最长长度
is_valid() #验证用户输入的信息是否有效,返回一个布尔值
cleaned_data() #清洗数据
error_massage() #定义错误的返回信息
#文件上传:
request.POST.get("file") #获取上传的文件的文件名
request.FILES #获取上传文件的对象 结果是一个字段
file_obj.name #获取上传文件在内存中的名字
#上传文件时要使用分片传输的方式
#上传
enctype="multipart/form-data" #form表单的属性里添加
#接收
if request.method=="POST":
file_obj = request.FILES.get("up_file")
fl = open(file_obj.name,'vb')
for i in file_obj.chunks():
fl.write(i)
fl.close()
#可以在class Meta中设定的功能
model = model.UserInfo #显示对于Model的字典,这里显示用户信息表
fields = "__all__" #显示数据表中所有的字段
fields = ["username","age"] #显示数据表的某些指定的字段
exclude = ["email"] #不显示数据表的某些字段
#自定义页面的标签
labels = {"username":"用户名","age":"年龄","email":"邮箱"}
#自定义在标签后面显示的提示帮助信息
help_texts = {"username":"请输入正确的用户名","email":"请输入正确的邮箱"}
#自定义错误信息,用户输入错误时提示
error_messages = {"username":{"required":"用户名不能为空"},"email":{"invalid":"邮箱不能为空"}}
#自定义标签的类型,在这里把email这个输入框的类型更改为email类型
from django import fields as field_widget
field_classes = {}"email":field_widget.EmailField}
#自定义插件(attrs为插件的属性)
from django.forms import widgets as formwidget
widgets = {"username":formwidget.Textarea(attrs={"class":"c1"})}
总结
到此这篇关于Django表单与请求生命周期的文章就介绍到这了,更多相关Django表单与请求生命周期内容请搜索本站以前的文章或继续浏览下面的相关文章,希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









