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 ...
随机推荐
- AFN 请求报 415错误解决方案
使用 AFHTTPSessionManager 发起请求时 设置下面两句代码 manager.requestSerializer = [AFJSONRequestSerializer seriali ...
- nginx实践(一)之静态资源web服务
静态资源服务场景CDN 配置语法-文件读取(nginx优势之一sendfile) 配置语法-tcp_nopush 简单的说就是把多个包合并,一次传输给客户端 配置语法-tap_nodelay 配置语法 ...
- selenium+python之 辨识alert、window以及操作
1.分辨 首先区别下alert.window和伪装对话框: alert,浏览器弹出框,一般是用来确认某些操作.输入简单的text或用户名.密码等,根据浏览器的不同,弹出框的样式也不一样,不过都是很简单 ...
- Redis简介与安装
目录 Redis概述与安装使用 Redis概述与安装使用 Author:SimpleWu GitHub-redis Redis简介 Redis英语全称:( REmote DIctionary Serv ...
- Mybait缓存机制
MyBatis同大多数ORM框架一样,提供了一级缓存和二级缓存的支持. 一级缓存:其作用域为session范围内,当session执行flush或close方法后,一级缓存会被清空. 二级缓存:二级缓 ...
- Winhex数据恢复学习笔记(三)
上次对文件系统进行简单的分析,这次就文件的镜像功能做一介绍 1.首先镜像的概念:镜像就是数据的副本,是原来数据在相同位置上以相同的排列模式生成的拷贝,所以镜像可以用来还原原始数据,代替原始数据工作,镜 ...
- 线性空间和异或空间(线性基)bzoj4004贪心+高斯消元优秀模板
线性空间:是由一组基底构成的所有可以组成的向量空间 对于一个n*m的矩阵,高斯消元后的i个主元可以构成i维的线性空间,i就是矩阵的秩 并且这i个主元线性无关 /* 每个向量有权值,求最小权极大线性无关 ...
- 使用powerdesigner导入sql脚本,生成物理模型
有些时候我们的powerdesigner以jdbc的形式链接本地数据库可能会失败,这时候我觉得从sql文件中生成物理模型是个很不错的方法 1.打开powerdesigner,文件->->r ...
- CA认证的原理和流程及https原理
1.什么是CA证书. 看过一些博客,写的比较形象具体. ◇ 普通的介绍信 想必大伙儿都听说过介绍信的例子吧?假设 A 公司的张三先生要到 B 公司去拜访,但是 B 公司的所有人都不认识他,他咋办捏?常 ...
- Python零基础入门之Tkinter的对话框
这篇博客主要是总结一下Tkinter中的对话框的使用,值得一提的是自从python3.0之后关于关于对话框的模块(messagebox.filedialog.colorchooser)都被收归到了tk ...