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. (一)STL体系结构基础介绍

    一.STL六大部件 容器(Containers):存放元素,内存由分配器搞定 分配器(Allocator):支持容器的内存分配 算法:操作容器元素的函数.与OO不同(面向对象将元素与函数放到一个类里) ...

  2. U盘权限不足,只读文件系统

    https://blog.csdn.net/baocheng_521/article/details/77161791 用第一种方式成功

  3. mysql 安装问题二:mysqld: Can't create directory 'E:\Software\mysql-5.7.24-winx64\data\' (Errcode: 2 - No such file or directory)

    原因:my.ini文件中的basedir(设置mysql的安装目录).datadir(设置mysql数据库的数据的存放目录)与MySQL解压后的路径不一致 解决办法: 将basedir=E:\Soft ...

  4. TypeError: $(…).tooltip is not a function

    问题描述:改了一个页面,发现进入这个页面的时候就一直在load···,F12看了一下,发现报了这个错误TypeError: $(…).tooltip is not a function,然后我就百度了 ...

  5. MySQL慢查询 - 开启慢查询

    一.简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 二.参数说明 slow_query_log 慢查询开启状态 slow_ ...

  6. 论文阅读笔记二十:LinkNet: Exploiting Encoder Representations for Efficient Semantic Segmentation(CVPR2017)

    源文网址:https://arxiv.org/abs/1707.03718 tensorflow代码:https://github.com/luofan18/linknet-tensorflow 基于 ...

  7. 用C语言实现窗口抖动

    #include "stdafx.h" #include <stdio.h> #include<Windows.h> int main() { ; //休眠 ...

  8. What's news in Visual Studio 2017

    文字总结: 1.高级智能提示  在属性列表中输入 M C即可查询属性中包含字母m\c的属性 2.更快的导航查询,在Go To All中输入任意查询的字符,可快速查到任何包含关键字的文件 3.代码智能分 ...

  9. delphi使用sqlite数据库时的中文路径问题

    https://blog.csdn.net/yuehaiyang/article/details/4184198 如果数据库所在的路径是中文路径的话,根本运行不起来,会报错,因为sqlite用的是ut ...

  10. 1个汉字在UTF-8编码占3个字节

    http://blog.csdn.net/ns_code/article/details/14162087 http://www.ruanyifeng.com/blog/2007/10/ascii_u ...