您的位置:首页 > 编程语言 > Go语言

django 的中间件 middleware

2017-04-18 00:00 211 查看
摘要: django可以对请求进行一些过滤 对响应进行包装

1 什么使用中间件

Middlewares 是修改 Django request 或者 response 对象的钩子


2 什么时候使用 middleware

如果你想修改请求,例如被传送到view中的HttpRequest对象。 或者你想修改view返回的HttpResponse对象,
这些都可以通过中间件来实现。

可能你还想在view执行之前做一些操作,这种情况就可以用 middleware来实现。

3 应用

request.user 是通过
AuthenticationMiddleware
来设置的

使用middleware时应该记住的东西

middlewares 的顺序非常重要

一个middleware只需要继承 object 类

一个middleware可以实现一些方法并且不需要实现所有的方法

一个middleware可以实现 process_request(方法) 但是不可以实现 process_response(方法) 和 process_view 方法。 这些都很常见,Django提供了很多middlewares可以做到。

一个middleware可以实现 process_response 方法,但是不需要实现 process_request 方法

实践:

1 选一个中间件类

class BookMiddleware(object):
def process_request(self, request):
print "Middleware executed"

2 MIDDLEWARE_CLASSES 中添加这个中间件

MIDDLEWARE_CLASSES = (
'books.middleware.BookMiddleware',
'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',
)


注意:所以如果 Middleware的process_request方法中返回了HttpResponse对象,那么它之后的中间件将被略过, view中的处理方法也被略过。

#!/bin/bash
# 更改过期红包
# 每天执行一次
# 0 0 * * * /data/htdocs/iggo/bin/update_expire.sh

cd /data/htdocs/iggo
/home/csgo/.virtualenvs/iggo/bin/python ./manage.py deal_expire --settings=settings.production

参考:http://blog.csdn.net/orangleliu/article/details/48316919
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Django