django - 使用django.test.Client

时间:2017-01-19 13:41:47

标签: python django

在我的测试中,我正在尝试创建和验证用户,但是当我点击我的视图时,它仍会返回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。

1 个答案:

答案 0 :(得分:3)

is_staffuser实例上的属性,而不是权限。您被重定向,因为该用户没有权限'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'