测试驱动中的 Django 禁止 HttpResponse
Django Forbidden HttpResponse in Test-Drive
我试图接近 100% 的测试覆盖率,但我在 Django-Admin 功能测试中遇到了 403 错误,如下所示:
class AdminTest(LiveServerTestCase):
def setUp(self):
self.client = Client()
self.my_admin = User(username='user', is_staff=True)
self.my_admin.set_password('password')
self.my_admin.save()
(...)
def testCreatePost(self):
self.client.get('/admin/', follow=True)
loginResponse = self.client.login(username='user',password='password')
self.assertTrue(loginResponse)
response = self.client.get('/admin/blog/post/add/', follow=True)
self.assertEqual(response.status_code, 200)
错误出现在最后一行:
self.assertEqual(response.status_code, 200)
AssertionError: 403 != 200
手动登录 client.get
URL 有效。通过的部分测试清楚地表明我可以登录到管理页面,但是,我无法访问 Post 模型的 'add' 页面。
设置is_staff=True
允许您访问管理员。它不会让您自动访问所有管理页面。您需要 'add blog post' 权限才能访问页面以添加博客文章。
最简单的选择是创建一个超级用户,然后他们将有权访问该页面。
self.my_admin = User(username='user', is_staff=True, is_superuser=True)
self.my_admin.set_password('password')
self.my_admin.save()
使用 create_superuser
密码,这简化为:
self.my_admin = User.objects.create_superuser('user', email=None, password='password')
或者您可以手动为用户(或用户所属的组)添加所需的权限。
from django.contrib.auth.models import User, Permission
self.my_admin = User(username='user', is_staff=True)
permission = Permission.objects.get(content_type__model='blog', codename='add_blog')
self.my_admin.user_permissions.add(permission)
我试图接近 100% 的测试覆盖率,但我在 Django-Admin 功能测试中遇到了 403 错误,如下所示:
class AdminTest(LiveServerTestCase):
def setUp(self):
self.client = Client()
self.my_admin = User(username='user', is_staff=True)
self.my_admin.set_password('password')
self.my_admin.save()
(...)
def testCreatePost(self):
self.client.get('/admin/', follow=True)
loginResponse = self.client.login(username='user',password='password')
self.assertTrue(loginResponse)
response = self.client.get('/admin/blog/post/add/', follow=True)
self.assertEqual(response.status_code, 200)
错误出现在最后一行:
self.assertEqual(response.status_code, 200)
AssertionError: 403 != 200
手动登录 client.get
URL 有效。通过的部分测试清楚地表明我可以登录到管理页面,但是,我无法访问 Post 模型的 'add' 页面。
设置is_staff=True
允许您访问管理员。它不会让您自动访问所有管理页面。您需要 'add blog post' 权限才能访问页面以添加博客文章。
最简单的选择是创建一个超级用户,然后他们将有权访问该页面。
self.my_admin = User(username='user', is_staff=True, is_superuser=True)
self.my_admin.set_password('password')
self.my_admin.save()
使用 create_superuser
密码,这简化为:
self.my_admin = User.objects.create_superuser('user', email=None, password='password')
或者您可以手动为用户(或用户所属的组)添加所需的权限。
from django.contrib.auth.models import User, Permission
self.my_admin = User(username='user', is_staff=True)
permission = Permission.objects.get(content_type__model='blog', codename='add_blog')
self.my_admin.user_permissions.add(permission)