Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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
decorator中的Django视图参数_Django_Python 2.7_Django Views - Fatal编程技术网

decorator中的Django视图参数

decorator中的Django视图参数,django,python-2.7,django-views,Django,Python 2.7,Django Views,我有一个功能,我想成为一个装饰与参数请任何人可以帮助这一点 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(pe

我有一个功能,我想成为一个装饰与参数请任何人可以帮助这一点

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)
有人能帮忙吗?谢谢

看看,像这样的

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
检查并编写装饰程序


或者您可以直接利用
用户\u通过测试
所需权限
,如果装饰程序只是检查权限以确定返回的结果。

您的“获取权限”要执行什么操作?权限级别的可能重复决定您是否可以获取该视图,因此视图具有与其关联的权限。因此,我将在装饰程序中传递“视图”权限,因此我不需要更改我的权限代码也许你可以从这里得到想法: