一、 importlib

settings

执行结果:

两个process_request 

process_response按照注册顺序的倒叙进行执行

PROCESS_VIEW 

Process_view 在找到url之后 ,视图函数之前执行。

==================================================================

一、中间件  

官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。

WSGI协议

首先弄清下面几个概念:
WSGI:全称是Web Server Gateway InterfaceWSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server如何与web application通信的规范。serverapplication的规范在PEP 3333中有具体描述。要实现WSGI协议,必须同时实现web server和web application,当前运行在WSGI协议之上的web框架有Bottle, Flask, Django

作者:rainybowe
链接:https://www.jianshu.com/p/679dee0a4193
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

知道中间件作用在哪个位置上: 在wsgi 和 url视图的逻辑中间的位置。

中间件的定义: 

wsgi之后 urls.py 之前 在全局操作Django请求和相应的模块

# 中间件 7个中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',

中间件的使用 :

 有5个固定的方法 :

process_request 

process_response 

上面两个最常用.

process-view

process_exception 

process_template

用反射的方法 importlib的用法

OO.py 文件

NAME ='小黑'
class Person(object):
def __init__(self,name):
self.name =name
def dream(self):
print('{}在做美梦'.format(self.name))

  

import importlib
o =importlib.import_module('xx.oo'
)
print(o.NAME)
p =o.Person('赵导')
p.dream()

输出的结果

 
 
 
 注意: import-module只能导入包 不能导入类,方法
 

 

输出结果:

中间件的执行顺序 

一、process_request

settings里的middleware配置文件

    'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'my_middleware.OOXX',
'my_middleware.MD2'
,
]

my_middleware.py 配置文件的配置

"""
自定义中间件
"""
from django.utils.deprecation import MiddlewareMixin class OOXX(MiddlewareMixin):
def process_request(self,request):
print('这是我的第一个中间件.') class MD2(MiddlewareMixin):
def process_request(self,request):
print('这是我的第二个中间件:MD2 ')

url配置文件

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/$',views.index),
]

views

def index(request):
print('这是app01 里面的index视图函数')
return HttpResponse('O98K')

输出结果

拿路径

定义白名单 

中间件py文件:

#d定义一个白名单
URL =['/index/','/xx/','/haha/']
class OOXX(MiddlewareMixin):
def process_request(self,request):
print('这是我的第一个中间件.')
print(request.path_info)#属性
print(request.get_full_path())#方法
if request.path_info in URL:
return
else:
return HttpResponse('不OJBK ') class MD2(MiddlewareMixin):
def process_request(self,request):
print('这是我的第二个中间件:MD2 ')

  

views视图

def index(request):
print('这是app01 里面的index视图函数')
return HttpResponse('O98K')

  

urls

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/$',views.index),
]

二、 Process_response:

它有两个参数,一个是request,一个是response,request就是上述例子中一样的对象,response是视图函数返回的HttpResponse对象。该方法的返回值也必须是HttpResponse对象。

中间件文件

#d定义一个白名单
URL =['/index/','/xx/','/haha/']
class OOXX(MiddlewareMixin):
def process_request(self,request):
print('这是我的第一个中间件.')
print(request.path_info)#属性
print(request.get_full_path())#方法
if request.path_info in URL:
return
else:
return HttpResponse('不OJBK ') def process_response(self,request,response):
"""
:param request: 是浏览器发来的请求对象
:param response: 是视图函数返回的响应对象
:return:
"""
print('这是ooxx中间件里的process_response')
return response class MD2(MiddlewareMixin):
def process_request(self,request):
print('这是我的第二个中间件:MD2 ') def process_response(self,request,response):
print('这是md2中间件里的process-response')
return response

  

 view

def index(request):
print('这是app01 里面的index视图函数')
return HttpResponse('O98K')

 

执行response方法是按照注册顺序(从上到下)的倒叙进行执行

 三、Process-view方法

 

day74天中间件介绍的更多相关文章

  1. #研发中间件介绍#异步消息可靠推送Notify

    郑昀 基于朱传志的设计文档 最后更新于2014/11/11 关键词:异步消息.订阅者集群.可伸缩.Push模式.Pull模式 本文档适用人员:研发   电商系统为什么需要 NotifyServer? ...

  2. #研发中间件介绍#定时任务调度与管理JobCenter

    郑昀 最后更新于2014/11/11 关键词:定时任务.调度.监控报警.Job.crontab.Java 本文档适用人员:研发员工   没有JobCenter时我们要面对的:   电商业务链条很长,业 ...

  3. {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证

    Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学会了 ...

  4. DSS中间件介绍

    DSS中间件采用HTTP协议,终端可以是任何的支持Http协议的设备,开发工具和语言均不受限制 DMS消息服务, 采用类似HTTP的协议 DSS-API介绍(持续更新) http://www.dioc ...

  5. django中间件介绍

    在学习django中间件之前,先来认识一下django的生命周期,如下图所示: django生命周期:浏览器发送的请求会先经过wsgiref模块处理解析出request(请求数据)给到中间件,然后通过 ...

  6. 4.4管道和中间件介绍「深入浅出ASP.NET Core系列」

    希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. 管道流 我们知道一个管道可以有一个或多个中间件,而中间件的职责是根据HttpContext处理HTTP请求,然后往 ...

  7. python Django 中间件介绍

    我们一直都在使用中间件,只是没有注意到而已,打开Django项目的Settings.py文件,看到下面的MIDDLEWARE配置项,django默认自带的一些中间件: MIDDLEWARE = [ ' ...

  8. express应用中常用中间件介绍

    var strftime = require('strftime'); 时间格式化中间件,功能和moment.js差不多 var methodOverride = require('method-ov ...

  9. 数据库DRDS中间件介绍

    DRDS/TDDL alibaba. Distributed Relational Database Service. 阿里分布式数据库DRDS的前身是淘宝分布式数据库层TDDL,大概在2012年的时 ...

随机推荐

  1. 4.n的高精度阶乘---优化

    题目:对于每组测试数据,在一行中给出一非负整数n(n小于等于100) 样例输入 3 5 10 样例输出 6 120 3628800 超时的代码如下:#include <iostream># ...

  2. (一)ROS的安装与环境配置

    1.设置教程 1.1 打开system setting(系统设置)->Software&Updates(软件与更新) 1.2点击上方Other software(其他软件),点击左下角a ...

  3. Html使用Iframe无刷新上传文件,后台接收

    html代码:我是发送请求到teacher_center.aspx,不是到.ashx一般处理程序里,需要加 runat="server",有空我再试试发送请求到 .ashx 里 & ...

  4. Django之ORM数据库

    5.1 数据库的配置 1    django默认支持sqlite,mysql, oracle,postgresql数据库.  <1> sqlite django默认使用sqlite的数据库 ...

  5. HHVM中文网

    HHVM中文网 百科资料 下载安装 HHVM文档 HHVM&Hack博客  <Hack与HHVM权威指南> 更多Facebook技术站 HHVM中文网 Facebook出品高性能服 ...

  6. PAT 1052 卖个萌 (20)(代码+思路)

    1052 卖个萌 (20)(20 分) 萌萌哒表情符号通常由"手"."眼"."口"三个主要部分组成.简单起见,我们假设一个表情符号是按下列格 ...

  7. Java 8 接口中的默认方法与静态方法

    Java 8 接口中的默认方法与静态方法 1. 接口中的默认方法 允许接口中包含具有具体实现的方法,该方法称"默认方法",默认方法使用用 default 关键字修饰. public ...

  8. Linux的简单介绍和开发基本运维时候用到的命令

    先简单介绍下Linux文件夹目录 1./ linux下的根目录 实际上等同于window的我的电脑点进去 2./etc /usr 一个是系统配置文件存放的地方,一个是系统资源(应用程序)放的地方这俩文 ...

  9. 2018.10.04 NOIP模拟 航班(tarjan+树形dp)

    传送门 考场上自己yy了一个双连通只有40分. 然后换根dp求最长路就行了. 代码

  10. 2018.08.30 bzoj4318: OSU!(期望dp)

    传送门 简单期望dp. 感觉跟Easy差不多,就是把平方差量进阶成了立方差量,原本维护的是(x+1)2−x2" role="presentation" style=&qu ...