Django-website 程序案例系列-13 中间件
自定义中间件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 中间件的更多相关文章
- Django-website 程序案例系列-17 forms表单验证的字段解释
1.Django内置字段如下: Field required=True, 是否允许为空 widget=None, HTML插件 label=None, 用于生成Label标签或显示内容 initial ...
- Django-website 程序案例系列-16 modle.form(表单验证)
案例程序: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- Django-website 程序案例系列-15 singnal分析
在django框架中singnal的应用相当于在你执行某些重要函数语句时在这条语句的前后放置两个预留的钩子,这两个钩子就是singnal,这个钩子也可以理解成两个触发器,当出现执行语句前后是触发执行某 ...
- Django-website 程序案例系列-14 缓存的应用配置文件的写法
由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5 ...
- Django-website 程序案例系列-18 多表跨表操作优化
详解Django的 select_related 和 prefetch_related 函数对 QuerySet 查询的优化 在数据库有外键的时候,使用 select_related() 和 pref ...
- Django-website 程序案例系列-12 CSRF
django为用户实现防止跨站请求伪造的功能 需要配置settings.py: django.middleware.csrf.CsrfViewMiddleware 1. form表单提交 <f ...
- Django-website 程序案例系列-3 URL详解
django参考资料:http://docs.30c.org/djangobook2/index.html urls.py是django中控制接收前端的参数指定函数去执行逻辑 第一种 函数的方式 ur ...
- Django-website 程序案例系列-11 验证装饰器
FBV装饰器: def auth(func): #装饰器函数 def inner(request, *args, **kwargs): v = request.COOKIES.get('usernam ...
- Django-website 程序案例系列-10 cookie 和 session的应用
cookie: 现在所有网站基本都要开启cookie 客户端浏览器上的一个文件 例如: {‘key’: 'sefwefqefwefw'} 是一个键值对 简单实现cookie认证: user_in ...
随机推荐
- kubernetes 里面pod时间修改
yaml文件中设置时区同步,只需要映射主机的“/etc/localtime”文件. apiVersion: extensions/v1beta1kind: Deploymentmetadata: na ...
- GIT 远程仓库:添加远程库、从远程库克隆
到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了. 可是有用过集中式版本控制系统SVN的童鞋会站出来说,这些功能在SVN里早就有了,没看出Gi ...
- sessionStorage和localStorage的区别
JS的本地保存localStorage.sessionStorage用法总结 localStorage.sessionStorage是Html5的特性,IE7以下浏览器不支持 为什么要掌握localS ...
- 计算几何总结(Part 1~2)
Preface 对于一个初三连三角函数都不会的蒟蒻来说计算几何简直就是噩梦. 反正都是要学的也TM没办法,那就慢慢一点点学起吧. 计算几何要有正确的板子,不然那种几百行CODE的题写死你. 本蒟蒻的学 ...
- 聊聊Zookeeper应用场景、架构设计、选主机制
Zookeeper作为一个分布式协调系统提供了一项基本服务:分布式锁服务,分布式锁是分布式协调技术实现的核心内容.像配置管理.任务分发.组服务.分布式消息队列.分布式通知/协调等,这些应用实际上都是基 ...
- Django后端彻底解决跨域问题
最近在接一个前后端分离的项目,后端使用的django-restframework,前端使用的Vue.后端跑起来后,发现前端在访问后端API时出了了跨域的问题. 类似如下报错: 关于跨域问题,之前这篇文 ...
- 详解centos7配置本地yum源的方法
近在使用虚拟机时遇到一些麻烦,因为公司内部有网络管理,所以vm连接不上外网,yum无法安装软件,怎么解决呢?–使用iso做本地yum源,可以解决大部份的包安装. vm安装的是centos7. 1.挂载 ...
- Redis常用操作-------List(列表)
1.BLPOP key [key ...] timeout BLPOP 是列表的阻塞式(blocking)弹出原语. 它是 LPOP 命令的阻塞版本,当给定列表内没有任何元素可供弹出的时候,连接将被 ...
- javaScript——DOM1级,DOM2级,DOM3级
DOM0,DOM2,DOM3事件处理方式区别:http://www.qdfuns.com/notes/11861/e21736a0b15bceca0dc7f76d77c2fb5a.html JS中do ...
- Wannafly挑战赛25 A.因子
传送门 [https://www.nowcoder.com/acm/contest/197/A] 题意 给你n,m,让你求n!里有多少个m 分析 看这个你就懂了 [https://blog.csdn. ...