Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.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/20.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 ';角色';对象没有属性'__名称';_Python_Django_Django Views_Django Generic Views - Fatal编程技术网

Python ';角色';对象没有属性'__名称';

Python ';角色';对象没有属性'__名称';,python,django,django-views,django-generic-views,Python,Django,Django Views,Django Generic Views,我正在尝试在我的应用程序中实现基于角色的权限。我需要一个decorator角色,我可以向其中传递一组用户角色,并且只有具有该角色的用户才能访问该视图。我已经为用户正确分配了角色,但是现在我得到了AttributeError,指出'Role'对象没有属性'\uu name' views.py文件: m_role_required = method_decorator(role_required) class AddProposal(FormView): @m_role_required(

我正在尝试在我的应用程序中实现基于角色的权限。我需要一个decorator角色,我可以向其中传递一组用户角色,并且只有具有该角色的用户才能访问该视图。我已经为用户正确分配了角色,但是现在我得到了AttributeError,指出
'Role'对象没有属性'\uu name'

views.py
文件:

m_role_required = method_decorator(role_required)
class AddProposal(FormView):

    @m_role_required(roles.space_admin)
    def dispatch(self, *args, **kwargs):
        return super(AddProposal, self).dispatch(*args, **kwargs)
需要装饰者
角色\u

from django.contrib.auth.decorators import user_passes_test
def role_required(*roles):

    def check_role(user):
        return getattr(user, 'role', None) in roles
    return user_passes_test(check_role)
角色
类:

class Roles(object):
    _roles_dict = None

    @property
    def roles_dict(self):

        if self._roles_dict is None:
            self._roles_dict = {}
            for item in self._config:
                if isinstance(item, basestring):
                    # An item like 'manager'
                    self._roles_dict[item] = None
                else:
                    # Anything else
                    raise ImproperlyConfigured(_INCORRECT_ARGS)
        return self._roles_dict

    @property
    def choices(self):

        return [(role, role) for role in self.roles_dict.keys()]

    def __init__(self, config=None):

        self._config = config or getattr(settings, 'USER_ROLES', ())

    def __getattr__(self, name):

        if name in self.roles_dict.keys():
            return Role(name=name)
        else:
            raise AttributeError("No such role exists '%s'" % name)

roles = Roles()
我无法找出出现此错误的原因。有人能帮忙吗。让我用这个加上追踪

环境:

Request Method: GET
Request URL: http://127.0.0.1:8000/en-gb/spaces/bithin/proposal/add/


Traceback:

  48. class AddProposal(FormView):
File "/home/bithin/gsoc/week3/e-cidadania/src/apps/ecidadania/proposals/views.py" in AddProposal
  78.     @m_role_required(roles.space_admin)
File "/usr/local/lib/python2.7/dist-packages/django/utils/decorators.py" in _dec
  34.         update_wrapper(_wrapper, func)
File "/usr/lib/python2.7/functools.py" in update_wrapper
  33.         setattr(wrapper, attr, getattr(wrapped, attr))

Exception Type: AttributeError at /en-gb/spaces/bithin/proposal/add/
Exception Value: 'Role' object has no attribute '__name__'

请看一下的代码。它返回的方法decorator无法接受为要修饰的实际函数保存的其他参数。此函数的属性,包括它的
\uuuu name\uuuu
,通过
functools.update\u wrapper
以通常的Python方式复制。由于传递的是
角色
对象而不是函数,因此会出现此错误

换句话说,您需要像这样重写您的视图:

space_admin_required = method_decorator(role_required(roles.space_admin))
class AddProposal(FormView):

    @space_admin_required
    def dispatch(self, *args, **kwargs):
        return super(AddProposal, self).dispatch(*args, **kwargs)

这是一个潜在的复制品

简短回答:类的名称存储在类中,实例不能直接使用。
您可以通过
myinstance.\uuuuu class\uuuuu.\uuuu name\uuuuu
访问实例的类名。请发布完整的回溯,包括行号。在确切知道是什么代码导致问题之前,无法调试该问题。异常不是由“类”引发的,而是由一行代码引发的。而
角色
类在哪里?也许这只是apps.thirdparty.userroles导入角色的userrole中的一个typo?Role类。问题似乎出在
Role\u required
decorator中,您没有发布其代码。请尽量减少您的帖子,以包含与错误相关的代码,而不是一堆无关的代码。这篇帖子是关于装饰者期望的内容,而不是关于类的字典。