我想编写一个自定义的wsgi中间件,每次传入的请求都会调用它。它检查URL,以及用户是否经过身份验证并允许请求继续或拒绝它。
在django中添加wsgi中间件的最佳方法是什么?
答案 0 :(得分:0)
为什么要将此作为WSGI中间件执行此操作? Django的运行效果不是很好 - 几年前有一些工作试图将Django中间件与WSGI中间件协调起来,但它并没有真正实现。
Django有自己的中间件版本,very well documented,您的请求可以在大约三行中完成。
答案 1 :(得分:0)
这里不需要wsgi中间件,可以轻松使用django中间件。
some_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_request()
之前,会调用任何中间件的 view
。如果从此方法返回HttpResponse
的实例,则不会调用该视图。由于HttpResponseForbidden
是HttpResponse
的子类,因此如果用户未经过身份验证,则不会调用该视图。
您需要将此自定义中间件添加到MIDDLEWARE_CLASSES。
settings.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',
)