Django相关的用户模型权限和装饰器

2024-06-26 13:50:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Django的初学者,我正在尝试使用权限来允许通过decorator访问特定的视图函数,只针对特定的用户类型。现在我完全被我读到的各种东西搞糊涂了,我不知道该怎么做。 我有两种不同的用户,分别是UserTypeONE和UserTypeTWO。 UserTypeONE和UserTypeTWO应该只能访问特定视图。 这是我的密码:

你知道吗myuserTypes.py文件你知道吗

class UserTypeONE(models.Model): 
    lieOtO_User = models.OneToOneField(settings.AUTH_USER_MODEL)
    lie_SomeAttribute= models.CharField(max_length=300, help_text ='Name')

    class Meta:
        permissions = (('Can_View_MyShop', 'Can see Shop View'),)

class UserTypeTWO(models.Model): 
    lieOtO_User = models.OneToOneField(settings.AUTH_USER_MODEL)
    lie_SomeOtherAttribute= models.CharField(max_length=300, help_text ='Name')

    class Meta:
        permissions = (('Can_View_Targets', 'Can see the Targets'),)

这就是我在我的生活中要做的视图.py你知道吗

@login_required
@permission_required('UserTypeONE.Can_View_MyShop', raise_exception=True)
def MyShopView(request):
    #do something

我也试过了

@user_passes_test(lambda u: u.usertypeone.permission('Can_View_MyShop'))

正如你们所看到的,我是一个绝对的初学者,不幸的是,所有的文档和例子都没有给我带来任何好处,相反,我更困惑了。 我真的很感谢你的帮助。你知道吗


Tags: 用户pyview视图modelmodelscanclass
1条回答
网友
1楼 · 发布于 2024-06-26 13:50:13

我将在这里使用user_passes_test(),因为您特别想要限制特定的视图。你知道吗

首先,定义两个函数,当您与应该能够看到您的内容的用户打交道时,这些函数将返回True。看起来您的UserTypeOneUserTypeTwo模型以一对一的关系扩展了基本User模型,因此您可以使用hasattr检查给定的基本用户是否具有以下属性之一:

def type_one_only(user):
    if hasattr (user, 'usertypeone'):
        return True
    else:
        return False

def type_two_only(user):
    #same thing without if/else
    return hasattr(user, 'usertypetwo')

现在,当您有一个视图要限制为一个用户类型时,可以在它前面添加user_passes_test装饰器:

@user_passes_test(type_one_only, login_url='/')
def my_view(request):
    ...

login_url是如果用户未通过您指定的测试,则将发送用户的位置。你知道吗

相关问题 更多 >