所谓请求生命周期,不是说请求存在是时间,而是整个请求完成从头到尾的全过程。
HTTP请求的特点:没有状态
django请求的生命周期是指:用户输入url到用户看到页面的信息,但是django后台有哪些操作
1. 当用户在浏览器中输入url时,浏览器会生成请求头和请求体发给服务端 请求头和请求体中会包含浏览器的动作(action),这个动作通常为get或者post,体现在url之中. 2. url经过Django中的wsgi,再经过Django的中间件,最后url到过路由映射表,在路由中一条一条进行匹配, 一旦其中一条匹配成功就执行对应的视图函数,后面的路由就不再继续匹配了. 3. 视图函数根据客户端的请求查询相应的数据.返回给Django,然后Django把客户端想要的数据做为一个字符串返回给客户端. 4. 客户端浏览器接收到返回的数据,经过渲染后显示给用户.
1.请求request
请求分为post和get两种方式
post中数据可以放在url中,也可以放在请求体中
get方式数据只能放在url中,请求体中没有信息
请求头和请求体一般通过两个换行符来分隔,
2.响应
相应也分为响应头和响应体
服务器返回给客户端的数据放在响应体中,同时会加一个响应头,cookie就在响应头中
3.CBV拓展
一个url对应一个视图函数叫做FBV模式,FUNCTION BASE VIEWS
一个url对应一个类,叫做CBV模式,CLASS BASE VIEWS
CBV中url的配置
urlpatterns = [ path('admin/', admin.site.urls), re_path(r'login/',views.login), re_path(r'cbv/',views.CBV1.as_view()) ] 路径类似,但是引出类的时候,后面要加上as_view
CBV中类的填写
from django.views import View#首先导入View模块 class CBV1(View):#自定制的类要继承View类,这样才可以完成CBV def get(self, request): return render(request, "cbv.html") def post(self, request): return HttpResponse("cbv.get")#这里的post和get是通过请求体中数据自动检测,如果是post方式就执行post方法,如果是get方式就执行get方法,rquest_method
CBV方式请求过程
在cbv模式中,用户向服务端请求数据时,会先将数据交给dispatch方法,django通过dispatch反射来找到对应的方法并且执行
当服务端给客户端返回数据的时候,也是通过dispatch方法
class CBV1(View): def dispatch(self, request, *args, **kwargs): print("dispatch......") res = super(CBV1, self).dispatch(request, *args, **kwargs) return res def get(self, request): return render(request, "cbv.html") def post(self, request): return HttpResponse("cbv.get") 当用户访问页面的时候,会先执行dispatch方法,在此类中继承了view中的dispatch方法,所以在服务端中会打印dispatching