Django的请求生命周期
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的请求生命周期的更多相关文章
- Django 框架 django的请求生命周期
概述 首先我们知道HTTP请求及服务端响应中传输的所有数据都是字符串,同时http请求是无状态的,可以通过session和cookie来辅助. 浏览器通过ip和端口及路由方式访问服务端. 在Djang ...
- DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render
DRF框架 全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...
- Django框架请求生命周期
先看一张图吧! 1.请求生命周期 - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行初次封装,然后将请求交给web框架(Flask.Django) - 中间件,帮助我们对请求进行校 ...
- Django的请求生命周期与中间件中的5中方法
请求生命周期: 客户端——>WSGI——> 中间件——>路由匹配——>视图函数——>WSGI——>客户端 中间件: 在全局层明处理请求和响应的 form djang ...
- 【转】Django框架请求生命周期
https://www.cnblogs.com/gaoya666/p/9100626.html 先看一张图吧! 1.请求生命周期 - wsgi, 他就是socket服务端,用于接收用户请求并将请求进行 ...
- Django Http请求生命周期
day54 请求响应Http 1.发送Http请求 2.服务器接收,根据请求头中的的url在路由关系表中进行匹配(从上到下) 3.匹配成功后,执行指定的views函数 4.业务处理 URL----&g ...
- Django之请求生命周期
settings.py中间件执行 自定义中间件的配置: (1)任意新建一个py文件,导入模块from django.utils.deprecation import MiddlewareMixin ( ...
- $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期
1 orm介绍 ORM是什么 ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM. 一 ...
- Django组件 - Django请求生命周期、中间件
一.Django请求生命周期 在学习中间件之前,先了解一下Django的请求生命周期,如下图: 1)client代表浏览器,浏览器内部为我们封装了socket,Django的WSGI模块也封装了soc ...
随机推荐
- XmlDocument.Load(url) 本地和http远程
XmlDocument.Load(url) 的使用 远程: string path = @"http://localhost:8080/Source/XMLConfig.xml"; ...
- Spark SQL访问PostgreSQL
随着Spark SQL的正式发布,以及它对DataFrame的支持,它可能会取代HIVE成为越来越重要的针对结构型数据进行分析的平台.在博客文章What’s new for Spark SQL in ...
- easyUI详解
1.EasyUI 是前端框架,封装大量 css和封装大量 JS 2.使用前端框架时,给标签定义class 属性,就会有样式和脚本功能了 3.data-options 属性是定义 easyui 属性的, ...
- 分布式Dubbo快速入门
目录 Dubbo入门 背景 zookeeper安装 发布Dubbo服务 Dubbo Admin管理 消费Dubbo服务 抽取与依赖版本管理 Dubbo入门 Editor:SimpleWu Dubbo是 ...
- vue之node.js的简单介绍
一.什么是node.js? 它是可以运行JavaScript的服务平台,可以吧它当做一门后端程序,只是它的开发语言是JavaScript 二.安装 1.node.js的特性: - 非阻塞IO模型 - ...
- 【python】查找函数定义
help(函数名) 举例:想知道gevnet.Timeout这个函数是怎么用的.help(gevent.Timeout). 之前不知道这样查,每次遇到新函数想知道有哪些参数我都要到网上疯狂查阅文档.现 ...
- C#关于线程的问题
1.通过System.threading.Thread类可以创建新的线程,并在线程堆栈中运行静态和动态的实例,可以通过Thread类的构造方法传递一个无参数,并且不返回的委托, class Progr ...
- bootstrap和easyui
1.easyui:自定义的样式要在原先的easyui样式之前引入,这样自定义的样式才能把原先的样式覆盖,即放置顺序为: <link rel="stylesheet" href ...
- 80端口被占用 导致apach无法启动问题
1.查找是哪个程序占用了80端口 netstat -ano 列出所有进程 观察 “本地地址” 列 找到对应的PID 我这里是4 简单的办法,打开任务管理器,查看PID是4的 是哪个进程. 发现是Sys ...
- Selenium+PhantomJS使用时报错原因及解决方案
问题 今天在使用selenium+PhantomJS动态抓取网页时,出现如下报错信息: UserWarning: Selenium support for PhantomJS has been dep ...