在我看来,这些 mixin 可以以不同的方式实现类似的目标。我可以通过检查用户是否具有 PermissionRequiredMixin 权限来让某人访问 View ,或者我可以使用 UserPassesTest 并编写一个 test_func 来检查用户是否在特定组中,甚至检查那里的权限。
我是 Django 的新手,我不知道何时使用一种和另一种。孤立地看,我了解他们的工作,但还不足以了解他们在哪里合适。
我遇到的几种情况我不确定哪个是最好的
最佳答案
test_func()
拒绝带有权限错误的请求方法返回 False
.顾名思义
PermissionRequiredMixin
只检查在 中定义的权限permission_required
属性或 get_permission_required()
方法。但是,
UserPassesTestMixin
是非常通用的版本,它可以帮助您检查任意数量的任意条件。例如,您可以检查登录用户的电子邮件域,或任何自定义属性或值等。示例 1
In this example, both are equal.
from django.contrib.auth import mixins
from django.views import generic
class TestPermissionView(mixins.PermissionRequiredMixin, generic.CreateView):
permission_required = [
'foo.add_bar',
'foo.change_bar'
]
class TestUserTestView(mixins.UserPassesTestMixin, generic.CreateView):
def test_func(self):
req_perms = [
'foo.add_bar',
'foo.change_bar'
]
return self.request.user.has_perms(req_perms)
在这个例子中,两个类的行为方式相同示例 2
class TestUserTestView(mixins.UserPassesTestMixin, generic.CreateView):
def test_func(self):
# this checks the email domain of the user
allowed_domains = ['foo.com', 'bar.co.in']
return self.request.user.email.split('@')[1] in allowed_domains
在此示例中,我们正在检查用户的电子邮件域。如您所见,此示例不能使用 PermissionRequiredMixin
重写。类(class)。
关于django - 何时使用 UserPassesTestMixin 与 PermissionRequiredMixin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62684582/