day74天中间件介绍
一、 importlib

settings

执行结果:

两个process_request




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

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


==================================================================
一、中间件
官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子。它是一个轻量、低级别的插件系统,用于在全局范围内改变Django的输入和输出。每个中间件组件都负责做一些特定的功能。
WSGI协议
首先弄清下面几个概念:
WSGI:全称是Web Server Gateway Interface,WSGI不是服务器,python模块,框架,API或者任何软件,只是一种规范,描述web server如何与web application通信的规范。server和application的规范在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()
输出的结果

输出结果:

中间件的执行顺序
一、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天中间件介绍的更多相关文章
- #研发中间件介绍#异步消息可靠推送Notify
郑昀 基于朱传志的设计文档 最后更新于2014/11/11 关键词:异步消息.订阅者集群.可伸缩.Push模式.Pull模式 本文档适用人员:研发 电商系统为什么需要 NotifyServer? ...
- #研发中间件介绍#定时任务调度与管理JobCenter
郑昀 最后更新于2014/11/11 关键词:定时任务.调度.监控报警.Job.crontab.Java 本文档适用人员:研发员工 没有JobCenter时我们要面对的: 电商业务链条很长,业 ...
- {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证
Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学会了 ...
- DSS中间件介绍
DSS中间件采用HTTP协议,终端可以是任何的支持Http协议的设备,开发工具和语言均不受限制 DMS消息服务, 采用类似HTTP的协议 DSS-API介绍(持续更新) http://www.dioc ...
- django中间件介绍
在学习django中间件之前,先来认识一下django的生命周期,如下图所示: django生命周期:浏览器发送的请求会先经过wsgiref模块处理解析出request(请求数据)给到中间件,然后通过 ...
- 4.4管道和中间件介绍「深入浅出ASP.NET Core系列」
希望给你3-5分钟的碎片化学习,可能是坐地铁.等公交,积少成多,水滴石穿,谢谢关注. 管道流 我们知道一个管道可以有一个或多个中间件,而中间件的职责是根据HttpContext处理HTTP请求,然后往 ...
- python Django 中间件介绍
我们一直都在使用中间件,只是没有注意到而已,打开Django项目的Settings.py文件,看到下面的MIDDLEWARE配置项,django默认自带的一些中间件: MIDDLEWARE = [ ' ...
- express应用中常用中间件介绍
var strftime = require('strftime'); 时间格式化中间件,功能和moment.js差不多 var methodOverride = require('method-ov ...
- 数据库DRDS中间件介绍
DRDS/TDDL alibaba. Distributed Relational Database Service. 阿里分布式数据库DRDS的前身是淘宝分布式数据库层TDDL,大概在2012年的时 ...
随机推荐
- 14-n皇后
/*题目内容: 国际象棋中的皇后可以沿着水平线,垂直线,或者斜线前进,吃掉遇到的所有棋子,如果棋盘上有八个皇后,则这八个皇后如何相安无事的放置在棋盘上,1970年与1971年, E.W.Dijkstr ...
- discuz回贴通知插件实现-显示用户状态设置
一.完善用户是否开启回贴通知 回贴通知插件建立模块时,指定了核心文件post_set.inc.php 1.创立好数据库 建立独立数据表(不建议直接修改原有的discuz数据库,防止discuz升级 ...
- C++的MFC 与 HTML 双向通讯
C++中嵌入ie浏览器总结(1) - ie边框 及上下文菜单 最近项目中用html 来做界面,也就折腾了一下在wxwidget中嵌入浏览器的若干细节工作,mfc也基本是类似的,由于wxwidget中已 ...
- springmvc使用list集合实现商品列表的批量修改
1将表单的数据绑定到List 1.1 需求 实现商品数据的批量修改. 1.2 需求分析 要想实现商品数据的批量修改,需要在商品列表中可以对商品信息进行修改,饼干且可以批量提交修改后的商品数据. 1.3 ...
- NPOI导入导出Excel数据
代码: using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; usi ...
- Java jdk 8 新特性
list 统计(求和.最大.最小.平均) 第一种方式 int suma = listUsers.stream().map(e -> e.getAge()).reduce(Integer::sum ...
- 值得一看!2018年最优秀的9个Android Material Design Apps!
今年4月,谷歌Gmail推出了全新的设计外观,全新的配色方案,更多的空白区域和精致的图标.也带来了Material Design 的一些改变 – Material Theming (材料主题),旨在自 ...
- java Exception in thread "main" java.lang.NoClassDefFoundError: main (wrong name: pm/main)
javac main.java 编译后没有问题 java main 出现下面在问题: Exception in thread "main" java.lang.NoClassDef ...
- 2018.09.08 bzoj4518: [Sdoi2016]征途(斜率优化dp)
传送门 把式子展开后发现就是要求: m∗(∑i=1msum′[i])−sum[n]2" role="presentation" style="position: ...
- jquery ajax 为什么会 多次请求
因你绑定的时间会随着你调用的地方增加而增加的,jquery 就是有这样的现象,举个例子让你解决吧,如果有个地方$('#Id').click(function(){ $.ajax({})})这样用对吧, ...




