Python django中间件不工作,但如果我使用装饰,它会工作
运行python 2.7 Django 1.6这是我的代码: 我的设置.py 当我访问mysite.net/prev/或mysite.net/ric/时,url.matchrequest.path结果为False,因此不会调用NeedEfSelected。任何帮助都将不胜感激 解决了的! 雅皮士!我自己解决了!我被误解了。这个中间件之前有另一个中间件。第一个,像这样,有一个错误: 返回self.orig_funcrequest,*args,**kwargs 它应该被“无返回”替换 因为中间件的工作逻辑。事实上,中间件是按顺序执行的,当所有测试都通过时返回None,或者当需要修改调用url的正常执行时返回HttpResponse。这是很好的解释Python django中间件不工作,但如果我使用装饰,它会工作,python,django,middleware,Python,Django,Middleware,运行python 2.7 Django 1.6这是我的代码: 我的设置.py 当我访问mysite.net/prev/或mysite.net/ric/时,url.matchrequest.path结果为False,因此不会调用NeedEfSelected。任何帮助都将不胜感激 解决了的! 雅皮士!我自己解决了!我被误解了。这个中间件之前有另一个中间件。第一个,像这样,有一个错误: 返回self.orig_funcrequest,*args,**kwargs 它应该被“无返回”替换 因为中间件的工
但我很快就浏览了它你有没有检查设置中的内容。需要使用URL?您是否也检查了中间件是否被调用?非常感谢您的重播。settings.NEED_EF_URL是我在帖子中显示的URL;我猜中间件被调用了,因为如果我从pdb导入;pdb.set_跟踪;在两次返回之间,它停止。这让我不得不说url.matchrequest.path结果为False
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'gest.middleware.RequireLoginMiddleware',
'gest.NeedCnd.NeedCndSelectedMiddleware',
'gest.NeedEf.NeedEfSelectedMiddleware',
)
NEED_CND_URLS= (
r'/tab/(.*)$',
r'/ric/(.*)$',
r'/prev/(.*)$',
r'/ese/(.*)$',
)
NEED_EF_URLS= (
r'/ric/(.*)$',
r'/prev/(.*)$',
)
LOGIN_REQUIRED_URLS = (
r'/cnd/(.*)$',
r'/cap/(.*)$',
r'/tab/(.*)$',
r'/ric/(.*)$',
r'/prev/(.*)$',
r'/ese/(.*)$',
)
#this is my NeedEf.py
## -*- coding: iso-8859-1 -*-
import re
from django.shortcuts import render_to_response
from django.conf import settings
from django.template import RequestContext
class NeedEfSelected(object):
def __init__(self, orig_func):
self.orig_func = orig_func
def __call__(self, request, *args, **kwargs):
if request.session.get('sel_esercizio',9999) != 9999:
return self.orig_func(request, *args, **kwargs)
else:
mess=" e\' necessario selezionare prima un esercizio;"
d= {'mess': mess, 'redir':'/ese/', 'class':'wrn'}
return render_to_response('generic_mess.html',d,
context_instance=RequestContext(request))
class NeedEfSelectedMiddleware(object):
def __init__(self):
self.required = tuple([re.compile(url) for url in settings.NEED_EF_URLS])
def process_view(self,request,view_func,view_args,view_kwargs):
# No need to process URLs if user already logged in
for url in self.required:
if url.match(request.path):
return NeedEfSelected(view_func)(request,*view_args,**view_kwargs)
return None