自定义中间件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. esp-adf Element PipeLine

    audio_element: 开发基于ADF的程序软件最基本的模块就是audio_element对象.所有的编码.解码.过滤.输入流.输出流实际上都是audio_element.(这个是官方的文件我翻 ...

  2. rook 入门理解

    参考:https://my.oschina.net/u/2306127/blog/1830356?from=timeline 1.Rook通过一个操作器(operator)完成后续操作,只需要定义需要 ...

  3. 搭建SSH服务

    1.安装 ssh-server 通过命令进行安装:sudo apt-get install openssh-server 在安装时遇到问题,根据提示,执行命令:sudo apt-get update, ...

  4. ABPZero中的Name和SurName处理,以及EmailAddress解决方案(完美)。

    使用ABPzero的朋友们都知道,User表中有Name和Surname两个字段,这两个字段对于国内的用户来说相当的不友好. 以及我们的一些系统中是不会涉及到EmailAddress字段.也就是说不会 ...

  5. 金蝶PDA金蝶盘点机金蝶仓库条码管理方案-采购入库单教程

    采购入库单有两种做法: 第一种:按照采购订单下推的采购入库单. 第二种:直接新增采购入库单,也就是不按照采购订单下推. 按照采购订单下推生成采购入库单,会以采购订单的商品品种和数量作为应收.扫描条码入 ...

  6. Docker容器学习梳理 - 应用程序容器环境部署

    关于国内Docker镜像,可以参考:Docker容器学习梳理--基础知识(2) 的Docker镜像使用. 如果我们需要在Docker环境下部署tomcat.redis.mysql.nginx.php等 ...

  7. M2贡献分分配方案

    1.初始分每个人都为0. 2.每周分配任务,按任务计分. 3.每周每个人有12.5分. 4.次周完成本周任务计6分. 5.未全部完成本周任务计6分. 6.12月29日统计分数,多出来的分数按完成任务数 ...

  8. WEEK 7:团队项目的感想

    经过了几个星期的团队协作,我们的“爬虫”有了很大的完善,我作为团队中的主DEV,在这个过程中一边工作一边阅读,也有了不少的收获. Brooks的<没有银弹>告诉我们,在软件领域,没有什么绝 ...

  9. 【ML】Two-Stream Convolutional Networks for Action Recognition in Videos

    Two-Stream Convolutional Networks for Action Recognition in Videos & Towards Good Practices for ...

  10. 解决AJAX session跨域失效

    1.想实现的功能是登录时有个验证码,这个验证码后台提供,然后放在session中,前台把用户输入的验证码通过AJAX发给后台,后台把session中的验证码取出来然后比较不同,一样则通过. 问题出现在 ...