Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.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 我的头发怎么了?_Python_Django_Decorator_Python Decorators - Fatal编程技术网

Python 我的头发怎么了?

Python 我的头发怎么了?,python,django,decorator,python-decorators,Python,Django,Decorator,Python Decorators,我对装饰师有意见。我正试图用可选参数编写自己的装饰器 现在是这样做的: def CheckPremissions(manager=1): def wrap(func): def wrapper(request, *args, **kwargs): if request.user.is_anonymous(): return HttpResponseRedirect(reverse('login'))

我对装饰师有意见。我正试图用可选参数编写自己的装饰器

现在是这样做的:

def CheckPremissions(manager=1):
    def wrap(func):
        def wrapper(request, *args, **kwargs):
            if request.user.is_anonymous():
                return HttpResponseRedirect(reverse('login'))

            logged_user = getRelatedWorker(request.user)

            if (logged_user == None):
                return HttpResponseRedirect('accounts/no_worker_error.html')

            if self.manager != 0:
                try:
                    dzial = Dzial.objects.get(kierownik=logged_user)
                except Dzial.DoesNotExist:
                    isManager = False
                else:
                    isManager = True

                if not isManager:
                    return HttpResponseRedirect('accounts/denied_logged.html')

            return func(request, *args, **kwargs)
        return wrapper
    return wrap
代码对我来说很好,但当我使用装饰器时,我会遇到以下错误:

Environment:

    Request Method: GET
    Request URL: http://127.0.0.1:8080/applications/show

    Django Version: 1.4.1
    Python Version: 2.7.3


Traceback:
    File "/home/marcin/projekt/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
      188.                 response = middleware_method(request, response)
    File "/home/marcin/projekt/lib/python2.7/site-packages/django/middleware/common.py" in process_response
      94.         if response.status_code == 404:

    Exception Type: AttributeError at /applications/show
    Exception Value: 'function' object has no attribute 'status_code'
我做错了什么?

我怀疑你没有正确使用装饰师。您需要调用它来指定管理器参数:

@CheckPremissions()
def someview(request):
    pass
或者明确指定:

@CheckPremissions(manager=0)
def someview(request):
    pass
你的装饰师也有不同的问题;您在代码中引用self.manager:

if self.manager != 0:
但这不是实例,也没有自参数。我想你的意思是:

if manager:

您可以通过将变量视为布尔值来测试该变量是否为非零。哦,你可能想修正一下装饰师的拼写;您可能是指检查权限:-

你的意思是检查权限而不是检查预授权吗?你是对的。那个自我之所以存在,是因为我以前想上一门装饰课;p再次感谢你: