自定义中间件1:

from django.utils.deprecation import MiddlewareMixin    # 中间件需要引用的包

class Row1(MiddlewareMixin): #自定义中间件函数       
def process_request(self, request):
print('1')
def process_response(self, request, response):
print('1')
return response class Row2(MiddlewareMixin): #自定义中间件函数
def process_request(self, request):
print('2')
def process_response(self, request, response):
print('2')
return response class Row3(MiddlewareMixin): #自定义中间件函数
def process_request(self, request):
print('3')
def process_response(self, request, response):
print('3')
return response

views.py

def mid(request):
print('mei qian')
return HttpResponse('OK')

  

返回的值: 执行的print反应了中间件的执行顺序如下

自定义中间件2:

from django.utils.deprecation import MiddlewareMixin

class Row1(MiddlewareMixin): # 自定义中间件函数
def process_request(self, request):
print('1') def process_view(self, request, view_func, view_func_args, view_func_kwargs):
print('11') def process_response(self, request, response):
print('1')
return response class Row2(MiddlewareMixin): # 自定义中间件函数
def process_request(self, request):
print('2') def process_view(self, request, view_func, view_func_args, view_func_kwargs):
print('22') def process_response(self, request, response):
print('2')
return response class Row3(MiddlewareMixin): # 自定义中间件函数
def process_request(self, request):
print('3') def process_view(self, request, view_func, view_func_args, view_func_kwargs):
print('33') def process_response(self, request, response):
print('3')
return response

  

返回的值: 执行的print反应了中间件的执行顺序如下

自定义中间件3:

在urls.py中加入这个url: url(r'^mid/(?P<nid>\d+)$', views.mid) # nid是传递的参数{nid: 'xxx'}
def process_view(self, request, view_func, view_func_args, view_func_kwargs): # nid可传递给中间件中的view_func_kwargs 接收一个键值{nid:'xxx'}
    print('33')
在urls.py中加入这个url: url(r'^mid/(\d+)$', views.mid) # 直接传递一个数值参数('3')
  def process_view(self, request, view_func, view_func_args, view_func_kwargs): # 可传递给中间件中函数的view_func_args 接收一个数值参数('3')
    print('33')

  

中间件流程图:

中间件中的异常处理:
def process_exception(self, request, exception): #此函数一般不执行除非中间件发生异常
  print('ex') 中间件的render对象返回:
class
  def render(self):
    return HttpResponse('OK') def test(request,nid):
  print('2')
  return Foo() def process_template_response(self,request,response): # 需要view中的函数返回的对象中具有render方法
  print('111')
  return response

Django-website 程序案例系列-13 中间件的更多相关文章

  1. Django-website 程序案例系列-17 forms表单验证的字段解释

    1.Django内置字段如下: Field required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label标签或显示内容 initial ...

  2. Django-website 程序案例系列-16 modle.form(表单验证)

    案例程序: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  3. Django-website 程序案例系列-15 singnal分析

    在django框架中singnal的应用相当于在你执行某些重要函数语句时在这条语句的前后放置两个预留的钩子,这两个钩子就是singnal,这个钩子也可以理解成两个触发器,当出现执行语句前后是触发执行某 ...

  4. Django-website 程序案例系列-14 缓存的应用配置文件的写法

    由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5 ...

  5. Django-website 程序案例系列-18 多表跨表操作优化

    详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化 在数据库有外键的时候,使用 select_related() 和 pref ...

  6. Django-website 程序案例系列-12 CSRF

    django为用户实现防止跨站请求伪造的功能 需要配置settings.py:  django.middleware.csrf.CsrfViewMiddleware 1. form表单提交 <f ...

  7. Django-website 程序案例系列-3 URL详解

    django参考资料:http://docs.30c.org/djangobook2/index.html urls.py是django中控制接收前端的参数指定函数去执行逻辑 第一种 函数的方式 ur ...

  8. Django-website 程序案例系列-11 验证装饰器

    FBV装饰器: def auth(func): #装饰器函数 def inner(request, *args, **kwargs): v = request.COOKIES.get('usernam ...

  9. Django-website 程序案例系列-10 cookie 和 session的应用

    cookie:  现在所有网站基本都要开启cookie 客户端浏览器上的一个文件 例如:   {‘key’: 'sefwefqefwefw'} 是一个键值对 简单实现cookie认证: user_in ...

随机推荐

  1. QT qss 初级介绍

    这篇文章来自于QT的帮助文档,你要是看了最新版的,会发现讲解得更棒.如果你的英文不是那么好,或者说看着头疼,那还是来看此篇吧. 在此之前说一个帮助文档的特别用法,绝不仅仅是搜单词,QT的文档非常强大的 ...

  2. 树莓派学习笔记(6):让Raspbian支持中文、禁用休眠

    引自:http://www.leiphone.com/news/201406/raspberry-pi-hands-on.html 一直令我很奇怪的是,即使你用Debian的安装光碟安装系统,如果你把 ...

  3. 《Google软件测试之道》测试开发工程师

    拖延了将近半年的草稿,断断续续的写完了.之前草草翻看完这本书,关注点主要在TE上,而关于SET的部分则只是浏览,最近后知后觉,又翻出了这本书,重新看了一遍,又有新收获. 就说说Google的SET是如 ...

  4. RabbitMq、ActiveMq、ZeroMq、kafka之间的比较

    MQ框架非常之多,比较流行的有RabbitMq.ActiveMq.ZeroMq.kafka.这几种MQ到底应该选择哪个?要根据自己项目的业务场景和需求.下面我列出这些MQ之间的对比数据和资料. 第一部 ...

  5. lesson3:小程序

    问题: 一·设计思想 创建一个静态变量,利用构造函数在每次创建对象时运行的机制,计算创建对象个数. 二·程序流程图 三·程序源代码 public class Test9{ public static ...

  6. AIS系统(转)

    船舶自动识别系统(Automatic Identification System, 简称AIS系统)由岸基(基站)设施和船载设备共同组成,是一种新型的集网络技术.现代通讯技术.计算机技术.电子信息显示 ...

  7. [Spark][Python]DataFrame中取出有限个记录的例子

    [Spark][Python]DataFrame中取出有限个记录的例子: sqlContext = HiveContext(sc) peopleDF = sqlContext.read.json(&q ...

  8. Momenta电话面试笔记

  9. TomCat 再次发布我的程序

    打包成.war的步骤就不说了,之后的配置和上一次的不一样. 在Tomcat的conf下的server.xml文件中,重新配置如下 <Service name="xfwweb" ...

  10. split-brain 脑裂问题(Keepalived)

    脑裂(split-brain)指在一个高可用(HA)系统中,当联系着的两个节点断开联系时,本来为一个整体的系统,分裂为两个独立节点,这时两个节点开始争抢共享资源,结果会导致系统混乱,数据损坏.对于无状 ...