我的怎么了?

2024-09-28 23:42:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我和装修师有点问题。我正试图用可选参数编写自己的decorator。在

现在是这样做的:

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

代码看起来不错(对我来说),但是当我使用修饰符时,我遇到了以下错误:

^{pr2}$

我做错什么了?在


Tags: returnifrequestdefmanagerargswrapperkwargs
1条回答
网友
1楼 · 发布于 2024-09-28 23:42:09

我怀疑你用错了装饰工。您需要调用它来指定manager参数:

@CheckPremissions()
def someview(request):
    pass

或者明确指定:

^{pr2}$

您的decorator也有一个不同的问题;您在代码中引用self.manager

if self.manager != 0:

但这不是实例,也没有self参数。我想你是说:

if manager:

(可以通过将变量视为布尔值来测试变量是否为非零)。哦,而且您可能希望修复装饰器的拼写;您可能是指CheckPermissions。:-)

相关问题 更多 >