如何为django定义自定义wsgi中间件
我想编写一个定制的wsgi中间件,它在每个传入请求上都被调用。它检查url,以及用户是否经过身份验证并允许请求继续或拒绝请求如何为django定义自定义wsgi中间件,django,Django,我想编写一个定制的wsgi中间件,它在每个传入请求上都被调用。它检查url,以及用户是否经过身份验证并允许请求继续或拒绝请求 在django中添加wsgi中间件的最佳方式是什么?具体来说,为什么要作为wsgi中间件来执行此操作?Django并不能很好地处理这些问题——几年前曾有一些工作尝试将Django中间件与WSGI中间件协调起来,但实际上并没有取得任何进展 Django有自己的中间件版本,也就是说,您的请求可以在大约三行中完成。您在这里不需要wsgi中间件,可以轻松使用Django中间件 一
在django中添加wsgi中间件的最佳方式是什么?具体来说,为什么要作为wsgi中间件来执行此操作?Django并不能很好地处理这些问题——几年前曾有一些工作尝试将Django中间件与WSGI中间件协调起来,但实际上并没有取得任何进展
Django有自己的中间件版本,也就是说,您的请求可以在大约三行中完成。您在这里不需要wsgi中间件,可以轻松使用Django中间件 一些_app/middleware.py
from django.http import HttpResponseForbidden
class AuthenticateMiddleware(object):
def process_request(self, request):
#do something with request.path
if request.user.is_authenticated():
#can do something or just pass
#but do not return a response from here
else:
#return a response from here so that view doesn't get called
return HttpResponseForbidden()
在处理视图之前,调用任何中间件的process\u request()
。如果从该方法返回HttpResponse
的实例,则不会调用该视图。由于HttpResponseForbidden
是HttpResponse
的子类,因此如果用户未经过身份验证,则不会调用该视图
您需要将此自定义中间件添加到中间件类中
设置.py
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'some_app.middleware.AuthenticationMiddleware',
)