我想知道PermissionsMixin是否具有与PermissionRequiredMixin相同的功能。
from django.contrib.auth.models import PermissionMixin
from django.contrib.auth.mixins import PermissionRequiredMixin
最佳答案
不,PermissionsMixin
是模型的混合,PermissionRequiredMixin
是混合在视图中的混合。
我想知道PermissionsMixin
是否具有与PermissionRequiredMixin
相同的功能。
这些不是函数,而是类。 PermissionsMixin
是模型的混合。PermissionsMixin
[Django-doc]是Django模型的混合。如果将混合添加到您的模型之一,它将添加特定于具有权限的对象的字段,例如is_superuser
,groups
和user_permissions
。它还提供了一组实用程序方法,用于检查具有此混入的模型是否具有给定的权限(例如,带有has_perm
[Django-doc]。给该混入的子类的典型模型是User
model [Django-doc]。
另一方面,PermissionRequiredMixin
[Django-doc]混合是一种混合,它提供了一种方便的方法来检查已登录用户是否具有所需的权限。例如:
from django.contrib.auth.mixins import PermissionRequiredMixin
class MyView(PermissionRequiredMixin, View):
permission_required = ('polls.can_open', 'polls.can_edit')
因此,这里我们定义了
View
,但是只有具有这些权限的用户才能访问该视图。此混入实现了一个
get_permission_required()
方法,该方法生成可迭代的检查权限,以及一个has_permission()
,用于检查用户是否具有这些权限。您可以覆盖这些方法,例如,如果权限是动态的(例如,取决于数据库中的数据)。