【问题标题】:Django view argument in decorator装饰器中的 Django 视图参数
【发布时间】:2013-02-16 09:15:19
【问题描述】:

我有一个函数不喜欢用一个参数做成一个装饰器,请任何人帮忙

def get_permission(request,permission_level):
    if has_permission(request,permission_level):#this is another function
        #my work will be done here
    else:
        raise Http404

我只是想在我看来像这样使用它

@get_permission(permission_level)
def a_view(request)

有人可以帮忙吗?谢谢

【问题讨论】:

标签: django python-2.7 django-views


【解决方案1】:

看看django/contrib/auth/decorators.py,类似

from functools import wraps
from django.utils.decorators import available_attrs

def get_permission(permission_level):
    def decorator(func):
        @wraps(func, assigned=available_attrs(func))
        def _wrapped(request, *args, **kwargs):
            if has_permission(request, permission_level): 
                'special logic goes here...'
                return func(request, *args, **kwargs)
            else:
                raise Http404

检查 How to make a chain of function decorators?PEP 318 编写装饰器。

或者你可以直接在django/contrib/auth/decorators.py中使用user_passes_testpermission_required,如果装饰器只是检查权限来确定返回的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-18
    • 2017-09-27
    • 2012-08-02
    • 2015-03-07
    • 1970-01-01
    • 2014-06-07
    • 2016-08-14
    • 2010-12-11
    相关资源
    最近更新 更多