Python Django decorator获取的是WSGIRequest,而不是预期的函数参数

Python Django decorator获取的是WSGIRequest,而不是预期的函数参数,python,django,decorator,Python,Django,Decorator,我正在为Django视图创建一个decorator,它将检查非Django管理的数据库中的权限。这是装饰师: def check_ownership(failure_redirect_url='/', *args, **kwargs): def _check_ownership(view): def _wrapper(request, csi=None): try: opb_id=request.user.get_p

我正在为Django视图创建一个decorator,它将检查非Django管理的数据库中的权限。这是装饰师:

def check_ownership(failure_redirect_url='/', *args, **kwargs):
    def _check_ownership(view):
        def _wrapper(request, csi=None):
            try:
                opb_id=request.user.get_profile().opb_id
                if opb_id and csi and model.is_users_server(opb_id, csi):
                    return view(*args, **kwargs)
            except Exception, e:
                logger.debug("Exception checking ownership: %s", str(e))
            return HttpResponseRedirect(failure_redirect_url)
        _wrapper.__dict__=view.__dict__
        _wrapper.__doc__=view.__doc__
        return _wrapper
    return _check_ownership
这就是它的使用方式:

@check_ownership
def my_view(request, csi=None):
    """Process my request"""
正在调用check\u ownership()并返回\u check\u ownership()。当调用_check_ownership()时,将使用WSGIRequest对象调用它,这是我所期望的调用_wrapper()的对象。有人知道我的方法到哪里去了,我怎样才能找回它吗?我没有办法和下一个装饰师联系起来,也没有办法了解事物的实际情况

哦,CentOS上的Python 2.4.3和Django 1.1.1

我想要回我的函数!;)

谢谢

tj

翻译成:

def my_view(request, csi=None):
    ...
my_view = check_ownership(my_view)
但是
检查所有权
不接受函数,但是
检查所有权
接受函数。这可能就是你的问题所在

翻译成:

def my_view(request, csi=None):
    ...
my_view = check_ownership(my_view)

但是
检查所有权
不接受函数,但是
检查所有权
接受函数。这可能是您的问题所在。

因此问题与如何调用装饰程序有关。您可以通过以下方式获得不同的行为:

@my_decorator

@my_decorator(someparam='someval')
在第一种情况下,您可以将callable直接传递给my_decorator。在第二种情况下,您不需要,但您从my_decorator返回的可调用项会


我相信这其中有一些深奥的原因,但事实上,伊姆索,这是站不住脚的。这使得使用默认参数创建装饰器变得不那么清晰。

因此问题与如何调用装饰器有关。您可以通过以下方式获得不同的行为:

@my_decorator

@my_decorator(someparam='someval')
在第一种情况下,您可以将callable直接传递给my_decorator。在第二种情况下,您不需要,但您从my_decorator返回的可调用项会

我相信这其中有一些深奥的原因,但事实上,伊姆索,这是站不住脚的。这使得创建带有默认参数的装饰器变得比它们应该的更不清晰