在我的测试中,我正在尝试创建和验证用户,但是当我点击我的视图时,它仍会返回302
def test_Home(self):
self.client = Client()
self.user = User.objects.create_user("xoxo", password="bar", is_staff=True)
self.logged_in = self.client.login(
username="xoxo", password="bar")
r = self.client.get('/hudson/')
self.assertEqual(r.status_code, HTTP_200_OK)
我的/hudson/
视图很简单:
class HomeView(PermissionRequiredMixin, generic.TemplateView):
template_name = 'foo/base.html'
permission_required = ('user.is_staff', )
login_url = reverse_lazy('admin:login')
我在视图中定义的admin/login
获得302。
答案 0 :(得分:3)
is_staff
是user
实例上的属性,而不是权限。您被重定向,因为该用户没有权限'user.is_staff'
。
您可以使用UserPassesTestMixin
mixin代替:
from django.contrib.auth.mixins import UserPassesTestMixin
class HomeView(UserPassesTestMixin, generic.TemplateView):
def test_func(self):
return self.request.user.is_staff
template_name = 'foo/base.html'
login_url = reverse_lazy('admin:login')
如果您在多个视图中执行此操作,则可以创建自己的mixin。
class UserIsStaffMixin(UserPassesTestMixin):
def test_func(self):
return self.request.user.is_staff
login_url = reverse_lazy('admin:login')
class HomeView(UserIsStaffMixin, generic.TemplateView):
template_name = 'foo/base.html'