Django的请求生命周期

请求生命周期

请求生命周期是指当用户在浏览器上输入url到用户看到网页的这个时间段内,Django后台所发生的事情。

1.客户端发送Http请求

2 .服务器接收,根据请求头中的url在路由关系进行匹配

3.匹配成功后,执行指定的views函数

URL---〉函数     ==〉FBV

URL---〉类         ==〉CBV

4.业务处理(根据个人需求自定)

操作数据库:

原生SQL(pymysql)

Django ORM 

操作模板

响应

5.渲染页面返回给客户端

1.客户端发送Http请求

在Django中,当我们访问一个的url时,会通过路由匹配进入相应的html网页中。
这种访问为get请求,请求只有请求头,没有请求体。
客户端发送Http请求后,Django会解析请求,进行路由分发。

 

使用get请求

使用get方式请求服务器的时候,所有数据包含在url中。

例如:http://127.0.0.1/index/?user=user1?password=123456

服务端接收数据:

request.GET.get("user")
request.GET.get("password")

使用post请求

使用post方式请求服务器的时候,所有数据都在请求体中。

服务端接收数据:

request.POST.get("user")

request.POST.get(password"")

  

2 .服务器接收,根据请求头中的url在路由关系进行匹配

注意:上下匹配,一旦匹配,就不会继续匹配。

所以为了避免匹配到上面的url,而没有匹配到下面的url,会在后面加上。

3.匹配成功后,执行指定的views函数

一个url对应一个视图函数,这个模式叫做FBV(Function Base Views)
一个url对应一个类,这个模式叫做CBV(Class Base views)

总结:一种函数式的,一种面向对象。

CBV

路由信息:

 from django.contrib import admin
from django.urls import path
from blog import views
urlpatterns = [
path('admin/', admin.site.urls),
path('fbv/',views.FBV),
path('cbv/',views.CBV.as_view()),
]

视图函数配置:

   from django.shortcuts import render,HttpResponse
from django.views import View class CBV(View):
def get(self,request):
return render(request, "cbv.html") def post(self,request):
return HttpResponse("cbv.post")

cbv.html:

 <body>
<form method="post" action="/cbv/">
{% csrf_token %}
<input type="text">
<input type="submit">
</form>
</body>

第一次访问是通过get的方式:返回cbv.html

第二次访问时通过表单的方式:返回cbv.post

启动django,访问:http://127.0.0.1:8080/cbv/

输入name,提交数据

CBV请求过程:

服务端通过路由映射表匹配成功后会自动去找dispatch方法,然后Django会通过dispatch反射的方式找到类中对应的方法并执行

类中的方法执行完毕之后,会把客户端想要的数据返回给dispatch方法,由dispatch方法把数据返回经客户端

例子,把上面的例子中的视图函数修改成如下:

from django.views import View

class CBV(View):
def dispatch(self, request, *args, **kwargs):
print("dispatch......")
res=super(CBV,self).dispatch(request,*args,**kwargs)
return res def get(self,request):
return render(request, "cbv.html") def post(self,request):
return HttpResponse("cbv.get")

FBV

FBV请求过程:

用户发送url请求,Django会依次遍历路由映射表中的所有记录,一旦路由映射表其中的一条匹配成功了,
就执行视图函数中对应的函数名,这是fbv的执行流程。

  

视图函数配置:

 def FBV(request):
if request.method == "GET":
return HttpResponse("fbv.html")
if request.method == "POST":
return HttpResponse("FBV.post")

fbv.html

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<body>
<form method="post" action="/fbv/">
{% csrf_token %}
<input type="text">
<input type="submit">
</form>
</body>
</body>
</html>

Django请求生命周期之响应内容

http提交数据的方式有"post","get","put","patch","delete","head","options","trace".

from表单支持get与post请求。

ajax支持全部请求。

在响应内容中设置请求头与实体

 class CBV(View):
def dispatch(self, request, *args, **kwargs):
print("dispatch......")
res=super(CBV,self).dispatch(request,*args,**kwargs)
print(res)
return res def get(self,request):
return render(request, "cbv.html") def post(self,request): res=HttpResponse("cbv.post")#请求实体
      res['head']="head" #设置请求头
res.set_cookie("k2","v2") #设置cookies
res.set_cookie("k4","v4")
print("res:",res)
print("request.cookie:",request.COOKIES)
return res

图片来源:https://blog.csdn.net/wswhero/article/details/80831874

Django的请求生命周期的更多相关文章

  1. Django 框架 django的请求生命周期

    概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串,同时http请求是无状态的,可以通过session和cookie来辅助. 浏览器通过ip和端口及路由方式访问服务端. 在Djang ...

  2. DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render

    DRF框架    全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...

  3. Django框架请求生命周期

    先看一张图吧! 1.请求生命周期 - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行初次封装,然后将请求交给web框架(Flask.Django) - 中间件,帮助我们对请求进行校 ...

  4. Django的请求生命周期与中间件中的5中方法

    请求生命周期: 客户端——>WSGI——> 中间件——>路由匹配——>视图函数——>WSGI——>客户端 中间件: 在全局层明处理请求和响应的 form djang ...

  5. 【转】Django框架请求生命周期

    https://www.cnblogs.com/gaoya666/p/9100626.html 先看一张图吧! 1.请求生命周期 - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行 ...

  6. Django Http请求生命周期

    day54 请求响应Http 1.发送Http请求 2.服务器接收,根据请求头中的的url在路由关系表中进行匹配(从上到下) 3.匹配成功后,执行指定的views函数 4.业务处理 URL----&g ...

  7. Django之请求生命周期

    settings.py中间件执行 自定义中间件的配置: (1)任意新建一个py文件,导入模块from django.utils.deprecation import MiddlewareMixin ( ...

  8. $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期

    1 orm介绍  ORM是什么   ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM.  一 ...

  9. Django组件 - Django请求生命周期、中间件

    一.Django请求生命周期 在学习中间件之前,先了解一下Django的请求生命周期,如下图: 1)client代表浏览器,浏览器内部为我们封装了socket,Django的WSGI模块也封装了soc ...

随机推荐

  1. Confluence 6 升级自定义的站点和空间获得你的自定义布局

    我们建议你在对站点进行布局修改的时候,你需要为你修改的 Confluence 站点或空间布局保留所有的修改记录. 如果没有的话,你应该可以通过下面的办法找到你的自定义修改.这个方法将会把你对全部网站和 ...

  2. 【sqli-labs】Less18~Less22

    Less18: User-Agent注入,有错误回显 感叹一句,越来越难了.现在只能先看代码再分析怎么注入了..... 通过代码,发现username和password均做了校验.但是会有一个插入us ...

  3. Python if __name__ == '__main__':(以主程序形式执行)

    在外部调用某个模块时,可能会将只能在本模块执行的代码给执行了,有没有什么办法让某些特定的代码指定只能在自身运行时才执行被调用时不执行呢?使用if __name__ == '__main__':. 示例 ...

  4. Python列表、元组、字典和集合的区别

    数据结构 是否可变 是否重复 是否有序 定义符号 列表(list) 可变 可重复 有序 [] 元组(tuple) 不可变 可重复 有序 () 字典(dictionary) 可变 可重复 无序 {key ...

  5. 饮冰三年-人工智能-Python-16Python基础之迭代器、生成器、装饰器

    一:迭代器: 最大的特点:节省内存 1.1 迭代器协议 a:对象必须提供一个next方法, b:执行方法要么返回迭代中的下一项,要么抛弃一个Stopiteration异常, c:只能向后不能向前. 1 ...

  6. python 给对象绑定属性和方法和__slots__的使用

    # 以c语言为主是静态语言,运行之前先编译,在运行的过程中不允许编辑代码# 在运行的过程中,可以改变,可以添加属性,就是属于动态语言(python) # python动态的添加属性以及方法class ...

  7. CMake在Visual Studio下保持目录结构

    CMake在Visual Studio下保持目录结构 原理 主要通过CMAKE自带函数source_group来设定. 需要把add_executable()函数进行封装,包裹一层source_gro ...

  8. python之string模块常量:数字,26个字母,标点符号,空白

    In [8]: import string In [9]: dir(string) In [10]: string.ascii_letters Out[10]: 'abcdefghijklmnopqr ...

  9. Evaluation map and reflexive space

    For a normed space \(X\), an isometric isomorphism can be defined from \(X\) to its second dual spac ...

  10. keepalived高可用配置注意事项

    安装注意事项: 1.关闭防火墙或者打开防火墙vrrp协议的通过,centos6 和centos7打开方式不同 2.一定要关闭防火墙 3.配置完成后重启网卡和keepalived服务 4.日志:/var ...