自定义中间件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. linux笔记-多服务器同时执行相同命令

    1.服务器的ip地址写到文件中,命名为nodelist.txt 192.168.1.160 192.168.1.166 2.编写运行脚本 for i in `cat nodelist.txt`do s ...

  2. OSGeo.OGR.Geometry

    #region 程序集 ogr_csharp.dll, v2.0.50727 // D:\KM行业需求\C++\gdal17_cSharp\ogr_csharp.dll #endregion usin ...

  3. flask seesion组件

    一.简介     flask中session组件可分为内置的session组件还有第三方flask-session组件,内置的session组件功能单一,而第三方的flask-sessoin可支持re ...

  4. 多线程-synchronized、lock

    1.什么时候会出现线程安全问题? 在多线程编程中,可能出现多个线程同时访问同一个资源,可以是:变量.对象.文件.数据库表等.此时就存在一个问题: 每个线程执行过程是不可控的,可能导致最终结果与实际期望 ...

  5. Luogu P2568 GCD

    我们首先发现这样肯定是做不了的,所以我们枚举为\(gcd(x,y)=d\)的\(d\) 然后考虑以下的性质: \(gcd(x,y)=1 \Leftrightarrow gcd(px,py)=p(p为素 ...

  6. [Oacle][Partition]Partition操作与 Index, Global Index 的关系

    [Oacle][Partition]Partition操作与 Index, Global Index 的关系: ■ Regarding the local index and the global i ...

  7. CentOS 7 安装Redis

    Linux安装Redis 一.下载并安装 $ wget http://download.redis.io/releases/redis-2.8.17.tar.gz $ tar xzf redis-2. ...

  8. ExtJS初探:了解 Ext Core

    Ext Core是一款和jQuery媲美的轻型JS库,基于MIT许可.对于Dom的操作,我个人还是比较喜欢用jQuery.当然如果项目中用的是ExtJS框架,也就没必要多引用一个jQuery,Ext ...

  9. 正则&highlight高亮实现(干货)

    写完正则表达式以后在浏览器上检测实在是不方便,于是就写了一个JS正则小工具,大大地提高了学习效率.学习之余用正则实现了一个highlight高亮demo,欢迎交流. 什么是正则表达式? 简单的说:正则 ...

  10. 分布式监控系统Zabbix-图形集中展示插件Graphtree安装笔记

    Zabbix想要集中展示图像,唯一的选择是screen,后来zatree解决了screen的问题,但性能不够好.Graphtree 由OneOaaS开发并开源出来,用来解决Zabbix的图形展示问题, ...