django解析

一、WSGI接口

WSGI服务网关接口:Web Server Gateway Interface缩写。

WSGI是python定义的Web服务器和Web应用程序之间或框架之间的通用接口标准。

WSGI定义:Web开发者实现了一个函数,并响应HTTP请求。

WSGI将Web组件分成三类:Web服务器(WSGI Server),Web中间件(WSGI Middleware),Web用用程序(WSGI Application).

Web服务器接收HTTP请求,调用WSGI接口标准注册的WSGI Application,最后将响应返回给客户端。

Web应用的本质:1.浏览器发送HTTP请求。

2.服务器接收请求,生成HTML页面。

3.服务器将HTML页面当成HTTP响应的body发送给浏览器。

4.浏览器接收到HTTP响应,并从HTTP Body中HTML并渲染出来

二、中间件

django的中间件(Middleware),其实就是一个类,在请求前和请求后,django会根据自己的规则并在合适的时机执行中间件中相应的方法。

中间件的官方说法是中间件是一个用来处理django的请求和相应的框架级别的钩子。在全局范围内改变django的输入和输出,每个中间件都有特定的功能。

中间件可以定义五个方法:1.process_request(self, request)

2.process_response(self, request, response)

3.process_view(self, request, view_func, view_args, view_kwargs)

4.process_exception(self, request, exception)

5.process_template_response(self, request, response)

以上方法返回的可以是None也可以是HttpResponse对象,如果是None,这继续按照django的规则继续执行下面的中间件,如果是HttpResponse对象,则直接把对象返回给用户。

process_request

process_request有一个参数,就是request,这个request和视图函数中的request是一样的。它的返回值可以是None也可以是HttpResponse对象。返回值是None的话,按正常流程继续走,交给下一个中间件处理,如果是HttpResponse对象,Django将不执行视图函数,而将相应对象返回给浏览器。

  1. 中间件的process_request方法是在执行视图函数之前执行的。
  2. 当配置多个中间件时,会按照MIDDLEWARE中的注册顺序,也就是列表的索引值,从前到后依次执行的。
  3. 不同中间件之间传递的request都是同一个对象

process_response

process_response有两个参数,一个是request,一个是response。这里面的request和process_request里面的参数request是一样的对象,response是视图函数返给回给用户的是Httpresponse对象,并且该方法返回值必须是HttpResponse对象。

  1. 中间件的process_response方法是在执行视图函数之后执行的。
  2. 当配置多个中间件时,会按照MIddleware注册顺序的倒序执行,从后往前执行。

process_view

process_view有四个参数:1.request是HttpResponse对象

             2.view_func是django即将用到的视图函数,它是实际的视图函数

3.view_args是传递给视图函数的位置参数的列表

4.view_kwargs是传递给视图函数的关键之参数的字典

5.args和kwargs都不包含第一个参数request

  1. 中间件的process_view方法是在执行视图函数之前执行的。
  2. process_view方法是在所有的process_request方法执行完之后执行的
  3. 当配置多个中间件时,会按照Middleware的注册顺序从前往后执行

process_view它应该返回一个None或HttpResponse对象,如果返回None,则继续执行剩下的中间件的process_view方法,如果返回HttpResponse对象,则不再执行剩下的process_view和后面的视图函数,直接执行

原文地址:https://www.cnblogs.com/aaronthon/p/9484468.html

时间: 2024-11-10 13:55:43

django解析的相关文章

Django解析前台页面

{{current_user}}

Django的配置文件和静态文件以及路由

配置文件 1. BASE_DIR BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 当前工程的根目录,Django会依此来定位工程内的相关文件,我们也可以使用该参数来构造文件路径. 2. DEBUG 调试模式,创建工程后初始值为True,即默认工作在调试模式下. 作用: 修改代码文件,程序自动重启 Django程序出现异常时,向前端显示详细的错误追踪信息 注意:部署线上运行的Django不要运行在调式模式

django的阶段总结

Django回顾 1 web应用 本质是基于socket实现的应用程序 浏览器-----------服务器 2 http协议:应用层协议 1 基于TCP协议 2 基于请求响应 3 短连接 4 无状态保存(引入了cookie,session技术) 请求协议 浏览器----------->服务器 <------------ 响应协议 请求协议 '' 请求首行 GET path?get数据 HTTP/1.1 请求头 userAgent: win Chorome/IPhone contentType:

Django基础二之URL路由系统

一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码. 基本格式  from django.conf.urls import url #循环urlpatterns,找到对应的函数执行,匹配上一个路径就找到对应的函数执行,就不再往下循环了,并给函数传一个参数request,和

Django之URL路由系统

一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码. 基本格式  1 2 3 4 5 from django.conf.urls import url #循环urlpatterns,找到对应的函数执行,匹配上一个路径就找到对应的函数执行,就不再往下循环了,并给函数传一个参

URL的反向解析

简单来说就是可以给我们的URL匹配规则起个名字,一个URL匹配模式起一个名字. 这样我们以后就不需要写死URL代码了,只需要通过名字来调用当前的URL 举个简单的例子: url(r'^home', views.home, name='home'), # 给我的url匹配模式起名(别名)为 home,别名不需要改,路径你就可以随便改了,别的地方使用这个路径,就用别名来搞 url(r'^index/(\d*)', views.index, name='index'), # 给我的url匹配模式起名为

02.Django基础二之URL路由系统

一 URL配置 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL与要为该URL调用的视图函数之间的映射表.你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那个URL调用那段代码. 基本格式 from django.conf.urls import url #循环urlpatterns,找到对应的函数执行,匹配上一个路径就找到对应的函数执行,就不再往下循环了,并给函数传一个参数request,和w

django框架下ajax获取cookie和session的方法以及简单的vue

Django的配置: pycharm中创建django工程之后注释掉MIDDLEWARE项中的'django.middleware.csrf.CsrfViewMiddleware'.此处作用是为了能够让js获取到cookie值 同时为了使用mysql,我们在setting中修改DATABASES中的'default'项为 'ENGINE': 'django.db.backends.mysql', 'NAME': 'db_test_shop1', 'HOST':'127.0.0.1', 'PORT

3、视图和模板

1.在我们的 poll 应用程序中,将有以下四个视图: Poll "index" 页 – 显示最新发布的民意调查. Poll "detail" 页 – 显示一项民意调查的具体问题,不显示该项的投票结果但可以进行投票的 form . Poll "results" 页 – 显示一项给定的民意调查的投票结果. 投票功能 – 为一项给定的民意调查处理投票选项. 在 Django 中,网页及其他内容是由视图来展现的.而每个视图就是一个简单的 Python