Python Django 2.1-';functools.partial';对象没有属性'__名称';
我最近将Django从2.0.7升级到了2.1.1,出现了一个新的错误,其中我得到了这个错误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, **
'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
属性