0

我有一个 Permissions 类,我需要为其创建一个静态方法,以根据我的views.py. 选择是通过复选框完成的,您可以根据自己的喜好在其中选择其中一个、一对或全部。这将创建一个字符串列表 (u'OWNER'),应在静态方法中对其进行处理并返回相应的Permissions.OWNER, Permissions.HR,Permissions.USER_ADMIN

views.pyPOST方法是这样的:

permissions = self.request.get_all('permissions') 
user.new_permission = Permissions.get_permission(permissions)

模型如下所示:

class Permissions(object):
    OWNER = 'OWNER'
    HR = 'HR'
    USER_ADMIN = 'USER_ADMIN'

descriptions = {
    OWNER: """Company owner (full admin)""",
    HR: """Human Resources administrator (access to special fields within job and submissions)""",
    USER_ADMIN: """Add/Delete users, change user permissions""",
}

到目前为止我对静态方法的了解:

@staticmethod
def get_permissions(permissions):
    new_perms = []
    for permission in permissions:
        name = permission
        if permission == 
        new_perms.append(permission)
    return new_perms

我真的不知道如何将字符串与模型中的值进行比较......我也不确定我是否正确地为问题命名。

先感谢您,

鲍里斯拉夫

4

1 回答 1

0

您的代码有很多问题,而且似乎过于复杂。我建议你做一些 python 教程。我不确定类定义是如何工作的。这里的任何方式都是您可以做到的一种方式。

class Permissions(object):

    _perms = {
        'OWNER': """Company owner (full admin)""",
        'HR': """Human Resources administrator (access to special fields within job and submissions)""",
       'USER_ADMIN': """Add/Delete users, change user permissions""",
    }

    @classmethod
    def get_permissions(cls,permissions):
        new_perms = []
        for choice in permissions:
            if choice in cls._perms:
                new_perms.append(choice)

        return new_perms

    @classmethod
    def get_description(cls,permission)
        return cls._perm.get(permission) 

实际上,在重新阅读您的问题时,我不确定您真正想要做什么。您提到了一个模型,但您提供的权限类并未反映这一点,我假设您需要查询该对象。事实上,如果您使用模型来定义权限,您将为每个可能的权限拥有一个 Permission 对象 - 也许。

替代策略,但是有很多并且没有更详细地了解您真正计划如何使用权限。(我使用 repose.who/what 作为相当完善的权限模型)。在最基本的情况下,您可以将 getattr 与现有类一起使用。但是我不喜欢它,因为没有检查。

class Permissions(object):
    OWNER = 'OWNER'
    HR = 'HR'
    USER_ADMIN = 'USER_ADMIN'

    @classmethod
    def get_permission(cls,permission):
        if hasattr(cls,permission):
            return getattr(cls,permission)
        else:
            raise KeyError("No permission %s" % permission)  # Some better exception should be used.
于 2013-08-16T23:23:42.077 回答