簡體   English   中英

django - 使用django.test.Client對用戶進行身份驗證

[英]django - authenticate users using django.test.Client

在我的測試中,我正在嘗試創建和驗證用戶,但是當我點擊我的視圖時,它仍然返回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')

我在視圖中定義了302到我的admin/login

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'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM