Django中请求的生命周期
Django中请求的生命周期
1、概述
首先我们知道HTTP请求及服务端响应中传输的都是字符串,
Django的请求生命周期指的是当用户在浏览器输入url到用户看到网页的这个时间段内,Django后台所发生的事情
1、当用户在浏览器输入url的时候,浏览器会发送请求头和请求体给服务端,请求头和请求体会包含浏览器的动作(action),通常为get或post,包含在url中。以get方式请求数据时,请求头里有信息,请求体里没有数据,以post请求数据时,请求头和请求体里都有数据.
2、url讲过Django的wsgi和中间件后,到达路由映射表,一条一条匹配,当匹配成功的时候就会执行对应的视图函数,不会再往下匹配了。
3、视图函数根据请求查询对应的数据返回给Django后,Django将数据做成字符串返回给客户端
4、客户端浏览器接收到返回的数据,经过渲染后返回给用户
客户端通过get请求像服务端发送nid=user请求,服务端可以通过request.GET.get('nid')的方式获得nid的数据,而当客户端通过post的方法请求时则服务端通过request.POST.get来获取数据。
需要注意的是,requset.POST是吧请求的数据转换成一个字典,请求体中的数据默认是以字符串形式存在的
2、FBV模式和CBV模式
一个url对应一个视图函数,这种模式称为FBV模式(Function Base Views)
另外一种模式称为CBV模式(Class base views),即一个url对应一个类
例如:使用CBV模式来请求网页
urlpatterns=[
url(r'^fbv/',views.fbv),
url(r'^cbv/',views.CBV.as_view()),
]
视图函数配置
from django.views import View
class CBV(View):
def get(self,request):
return render(request, "cbv.html")
def post(self,request):
return HttpResponse("cbv.get")
使用fbv的模式,在url匹配成功之后,会直接执行对应的视图函数.
而如果使用cbv模式,在url匹配成功之后,会找到视图函数中对应的类,然后这个类回到请求头中找到对应的Request Method.如果是客户端以post的方式提交请求,就执行类中的post方法;如果是客户端以get的方式提交请求,就执行类中的get方法,然后查找用户发过来的url,在类中执行对应的方法查询数据。
2.1 FBV方式的请求过程
用户发送url请求,Django会一次遍历路由映射表中的记录,一旦匹配就执行对应的视图函数
2.2CBV方式的请求过程
用户发给服务端的请求包含url和请求方法method,都是字符串类型,
服务端通过路由映射表匹配成功后会自动去找dispatch方法,通过dispatch反射的方式找到类中对应的方法并执行,
执行完毕之后,会把客户端想要的数据返回给dispatch,由其返回给客户端
3、Django请求生命周期之响应内容
http提交数据的方式有"post","get","put","patch","delete","head","options","trace".
HTTP请求方法
根据HTTP标准,HTTP请求可以使用多种请求方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
| 序号 | 方法 | 描述 |
|---|---|---|
| 1 | GET | 请求指定的页面信息,并返回实体主体。 |
| 2 | HEAD | 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头 |
| 3 | POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 |
| 4 | PUT | 从客户端向服务器传送的数据取代指定的文档的内容。 |
| 5 | DELETE | 请求服务器删除指定的页面。 |
| 6 | CONNECT | HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。 |
| 7 | OPTIONS | 允许客户端查看服务器的性能。 |
| 8 | TRACE | 回显服务器收到的请求,主要用于测试或诊断。 |
提交数据的时候,服务端依据method的不同会触发不同的视图函数.
对于from表单来说,提交数据只有get和post两种方法

浙公网安备 33010602011771号