Python django-使用django.test.Client对用户进行身份验证
在我的测试中,我试图创建并验证一个用户,但当我点击我的视图时,它仍然返回302Python django-使用django.test.Client对用户进行身份验证,python,django,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")
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,如视图中定义的那样 是用户
实例上的属性,而不是权限。您被重定向,因为用户没有权限“user.is\u staff”
您可以使用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'
你的意思是我必须改变我的观点以适应测试?我在所有视图中都使用此模板,在每个视图中添加test_func似乎很愚蠢。难道没有更好的方法吗?这不是为了适应测试,而是为了修正视图。没有权限user.is\u staff
(除非您手动创建了它),因此您不能使用PermissionRequiredMixin
检查它。。如果您不想在多个视图中定义相同的test_func
,那么请创建您自己的mixin。恭喜,您的测试发现了一个bug!在Django?:微笑:在我的代码里皱眉: