Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django中间件不工作,但如果我使用装饰,它会工作_Python_Django_Middleware - Fatal编程技术网

Python django中间件不工作,但如果我使用装饰,它会工作

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 它应该被“无返回”替换 因为中间件的工

运行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。这是很好的解释
但我很快就浏览了它

你有没有检查设置中的内容。需要使用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