【Django】request 处理流程(转)

Django 和其他 Web 框架的 HTTP 处理的流程大致相同,Django 处理一个 Request 的过程是首先通过中间件,然后再通过默认的 URL 方式进行的。我们可以在 Middleware 这个地方把所有 Request 拦截住,用我们自己的方式完成处理以后直接返回 Response。

1. 加载配置

Django 的配置都在 “Project/settings.py” 中定义,可以是 Django 的配置,也可以是自定义的配置,并且都通过 django.conf.settings 访问,非常方便。

2. 启动

最核心动作的是通过 django.core.management.commands.runfcgi 的 Command 来启动,它运行 django.core.servers.fastcgi 中的 runfastcgi , runfastcgi 使用了 flup 的 WSGIServer 来启动 fastcgi 。而 WSGIServer 中携带了 django.core.handlers.wsgi 的 WSGIHandler 类的一个实例,通过 WSGIHandler 来处理由Web服务器(比如Apache,Lighttpd等)传过来的请求,此时才是真正进入 Django 的世界。

3. 处理 Request

当有 HTTP 请求来时, WSGIHandler 就开始工作了,它从 BaseHandler 继承而来。 WSGIHandler 为每个请求创建一个 WSGIRequest 实例,而 WSGIRequest 是从 http.HttpRequest 继承而来。接下来就开始创建 Response 了。

4. 创建Response

BaseHandler 的 get_response 方法就是根据 request 创建 response , 而 具体生成 response 的动作就是执行 urls.py 中对应的view函数了,这也是 Django可以处理“友好URL”的关键步骤,每个这样的函数都要返回一个 Response 实例。此时一般的做法是通过 loader 加载 template 并生成页面内 容,其中重要的就是通过 ORM 技术从数据库中取出数据,并渲染到 Template 中,从而生成具体的页面了。

5. 处理Response

Django 返回 Response 给 flup , flup 就取出 Response 的内容返回给 Web 服务器,由后者返回给浏览器。

总之, Django 在 fastcgi 中主要做了两件事:处理 Request 和创建 Response , 而它们对应的核心就是“urls分析”、“模板技术”和“ORM技术”。

如图所示,一个 HTTP 请求,首先被转化成一个 HttpRequest 对象,

然后该对象被传递给 Request 中间件处理,如果该中间件返回了Response,则直接传递给 Response 中间件做收尾处理。

否则的话 Request 中间件将访问 URL 配置,确定哪个 view 来处理,在确定了哪个 view 要执行,

但是还没有执行该 view 的时候,系统会把 request 传递给 View 中间件处理器进行处理,

如果该中间件返回了Response,那么该 Response 直接被传递给 Response 中间件进行后续处理,

否则将执行确定的 View 函数处理并返回 Response,在这个过程中如果引发了异常并抛出,会被 Exception 中间件处理器进行处理。

时间: 2024-10-20 21:05:47

【Django】request 处理流程(转)的相关文章

django入门 -- 简单流程

django入门 -- 简单流程 这里简单的演示完成一个 django 大概流程,后面会有详细解释 搭建开发环境 以下使用的是 ubuntu 系统 在生产环境中,有的时候,我们开发的项目可能用的是几个不同的 环境,所以通常我们会创建虚拟环境,在虚拟环境中安装我们需要的 配置,这里从配置虚拟环境开始 创建虚拟环境 创建:mkvirtualenv [虚拟环境名称] 删除:rmvirtualenv [虚拟环境名称] 进入:workon [虚拟环境名称] 退出:deactivate 所有的虚拟环境,都位

Django 创建项目流程

django 项目创建流程 1 创建项目 cmd django-admin startproject 项目名称 pycharm file -- new project -- Django -- 项目名字 -- 选择解释器 -- 输入app名称 -- 创建 2 启动项目 cmd ** 切换到项目根目录下 manage.py python manage.py runserver #127.0.0.1:8000 python manage.py runserver 80 # 127.0.0.1:80

六、Python Django模板使用流程

Python Django模板使用流程 一.创建工程项目 # django-admin.py startproject csvt02 # cd csvt02 二.创建应用 # django-admin.py startapp blog 三.添加访问url # egrep -v "#|^$" urls.py from django.conf.urls.defaults import patterns, include, url urlpatterns = patterns('', url

Django创建基本流程

Django创建基本流程 1.创建工程:django-admin startproject 工程名 2.创建应用:python manage.py startapp 应用名 3.激活项目:修改settings.py文件中的INSTALLED_APPS.在该列表的最后加上'应用名' 4.配置mysql数据库: 在配置前,需要安装pymysql库. 1)修改工程目录中全局__init__.py文件.在里面写入一下代码: import pymysql pymysql.install_as_MySQLd

django request 获取请求的URL

1. get_full_path() 获取的url路径包含参数 2.path_info 获取的路径不包含参数 注意:获取的路径都不包含协议 IP 和端口 3.补充 sesssion http://127.0.0.1:8000/admin/login/?next=/admin/ 1.登录admin /admin/ 使用 path_info 获取 /admin/ django request 获取请求的URL request.get_host() 获取请求地址 request.path 获取请求的p

Django中间件执行流程

中间件 中间件函数是 django 框架为我们预留的函数接口, 让我们可以干预请求和应答的过程 1. 获取浏览器端的IP地址: 使用 request.META['REMOTE_ADDR'] 2. 使用中间件 1. 创建中间件: 新建 middlewere.py 的文件 from django.htto import HttpResponse ? class BlockIPSMiddleware(object):    """中间件类"""    

Django Rest框架 流程详解

什么是Restful REST与技术无关,代表的是一种软件架构风格,REST是Representational State Transfer的简称,中文翻译为“表征状态转移” REST从资源的角度类审视整个网络,它将分布在网络中某个节点的资源通过URL进行标识,客户端应用通过URL来获取资源的表征,获得这些表征致使这些应用转变状态 所有的数据,不过是通过网络获取的还是操作(增删改查)的数据,都是资源,将一切数据视为资源是REST区别与其他架构风格的最本质属性 对于REST这种面向资源的架构风格,

深入了解Volley如何执行一个Request的流程

Volley主要类构成 Volley: 框架同名类,负责创建RequestQueue对象 Request:代表一个网络请求的抽象类,具体实现子类有(StringRequest,JsonRequest,ImageRequest),需添加到RequestQueue中操作.包含了url,请求方法,请求Header,请求Body,请求的优先等级信息. RequestQueue:核心类,负责维护所有的Request对象,完成请求操作.该类中有两个基于优先级的Request队列mCacheQueue,mNe

三、Django概述和流程

一.MVC模式 MVC(Model-View-Controller),中文名“模型-视图-控制器”,是一个好的Web应用开发所遵循的模式,它有利于把Web应用的代码分解为易于管理的功能模块. M:Model是用来传给View的,View在替换变量的时候,可以从Model中取出相应的数据. V:View负责显示逻辑,是包含变量的模板,通过简单地替换一些变量,View最终输出的就是用户看到的HTML: C:Controller负责业务逻辑,将Web应用'粘合'在一起,比如检查用户名是否存在,取出用户