我正在尝试在User
环境中测试Python 3.4
模型和视图,但我在解决问题时遇到了困难。
在我的应用中,只有员工用户才能添加/删除/修改用户个人资料。因此,在setUp
上,我创建了一个管理员用户,其中设置了字段 is_staff 。然后,在测试用例中,我强制认证为此管理员用户,这应该允许我创建新用户。此代码如下所示:
class UserTests(APITestCase):
def setUp(self):
self.admin = User(username='admin', password='pass', is_staff=True)
self.admin.save()
def test_create_user(self):
"""
Ensure we can create a new user object without any optional fields.
"""
url = reverse('user-list')
data = {'username': 'adam', 'is_staff': False}
self.client.force_authenticate(user='admin')
response = self.client.post(url, data, format='json')
self.assertEqual(response.status_code, status.HTTP_201_CREATED)
self.assertEqual(response.data, data)
运行此测试用例会产生以下错误跟踪:
Error
Traceback (most recent call last):
File "/Users/Jonathan/GitHub/h2oiq_api/h2oiq_api/test.py", line 19, in test_create_user
response = self.client.post(url, data, format='json')
.
.
.
File "/Users/Jonathan/.virtualenvs/h2oiq-api/lib/python3.4/site-packages/rest_framework/test.py", line 90, in post
return self.generic('POST', path, data, content_type, **extra)
File "/Users/Jonathan/.virtualenvs/h2oiq-api/lib/python3.4/site-packages/rest_framework/views.py", line 359, in initial
self.check_permissions(request)
.
.
.
File "/Users/Jonathan/.virtualenvs/h2oiq-api/lib/python3.4/site-packages/rest_framework/views.py", line 304, in check_permissions
if not permission.has_permission(request, self):
File "/Users/Jonathan/.virtualenvs/h2oiq-api/lib/python3.4/site-packages/rest_framework/permissions.py", line 55, in has_permission
return request.user and request.user.is_staff
AttributeError: 'str' object has no attribute 'is_staff'
有人可以详细说明为什么缺少这个属性吗?我已经彻底阅读了Django REST框架文档,特别是APIClient
,Permissions
和BasicAuthentication
指南,但我无法找到有关此问题的任何其他信息。我试过评论强制认证,但没有解决任何问题。
赞赏任何数量的帮助或见解!我正在学习Django REST。
答案 0 :(得分:1)
force_authenticate()
获取user
争论的用户对象,而不是用户名的字符串。
所以在你的情况下你会使用
self.client.force_authenticate(user=self.admin)