Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/276.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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 Django 2.1-';functools.partial';对象没有属性'__名称';_Python_Django - Fatal编程技术网

Python Django 2.1-';functools.partial';对象没有属性'__名称';

Python Django 2.1-';functools.partial';对象没有属性'__名称';,python,django,Python,Django,我最近将Django从2.0.7升级到了2.1.1,出现了一个新的错误,其中我得到了这个错误'functools.partial'object has no attribute'\uu name\uu' 我想了解我的修复是否正确,以及是什么导致了这个新错误的发生,我在django发行说明中找不到与这个问题相关的任何东西,也许我错过了它 decorators.py def auth0_login_required(function): def wrap(request, *args, **

我最近将Django从2.0.7升级到了2.1.1,出现了一个新的错误,其中我得到了这个错误
'functools.partial'object has no attribute'\uu name\uu'

我想了解我的修复是否正确,以及是什么导致了这个新错误的发生,我在django发行说明中找不到与这个问题相关的任何东西,也许我错过了它

decorators.py

def auth0_login_required(function):
    def wrap(request, *args, **kwargs):

        if request.isAuthenticated or request.user.is_staff:
            pass
        else:
            raise Http404()

        return function(request, *args, **kwargs)
    wrap.__doc__ = function.__doc__
    wrap.__name__ = function.__name__ # ERROR HERE
    return wrap
如何使用它,查看.py

@method_decorator(auth0_login_required, name='dispatch')
class Dashboard(View):
    ...
对于修复,我刚刚删除了
wrap.\uuuuuu name\uuuuu=函数.\uuuuu name\uuuuu
,但我不确定它是否会破坏其他东西


有人能解释一下吗?

与其手动复制内容,不如使用来处理:

from functools import wraps

def auth0_login_required(function):
    @wraps(function)
    def wrap(request, *args, **kwargs):

        if request.isAuthenticated or request.user.is_staff:
            pass
        else:
            raise Http404()

        return function(request, *args, **kwargs)

    return wrap
@wrapps()
decorator(通过知道如何正确处理
functools.partial
对象)(或者更确切地说,它可以处理
functools.partial
对象没有
\u name\u
属性这一事实)

视图
类上找到的已包装的
functools.partial()
对象没有
\uuuu name\uuuuuu
属性是可以的,但不可以的是,即使在装饰具有该属性的函数时,也根本不复制该属性。如果不想使用
@wrapps()
您必须手动复制属性并自己处理异常:

try:
    wrap.__name__ = function.__name__
except AttributeError:
    pass
try:
    wrap.__doc__ = function.__doc__
except AttributeError:
    pass
但是要考虑到这不会复制
\uuuuqalname\uuu
\uuuuu模块\uuuu
\uuuuuuu注释
属性,不会处理
函数
上设置的任何自定义属性(其他装饰程序可能依赖于这些属性)。
@functools.wrapps()
会处理所有这些问题,另外它会在decorator包装函数上设置
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
属性