python – 如何使用django_webtest的基本身份验证来访问Django REST框架?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 如何使用django_webtest的基本身份验证来访问Django REST框架?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2985字,纯文字阅读大概需要5分钟。
内容图文
![python – 如何使用django_webtest的基本身份验证来访问Django REST框架?](/upload/InfoBanner/zyjiaocheng/722/43897e41f75349c992734bc568841a0d.jpg)
我在将数据发布到我的测试中使用Django REST框架的一些视图时遇到了麻烦.我正在使用django_webtest来测试我的用户API.我遇到了以下代码的问题:
class UserApiTest(WebTest):
def setUp(self):
AdminFactory()
def test_accessing_user_list_shows_one_user(self):
user_list = self.app.get('/quickstart/users/', user='admin')
assert_that(user_list.json, has_entry('count', 1))
def test_posting_new_user_returns_url_for_user_detail(self):
post_data = {'username': 'john', 'email': 'john.doe@example.com'}
user_create = self.app.post('/quickstart/users/', post_data, user='admin')
url = 'http://localhost:80/quickstart/users/2/'
assert_that(user_create.json, has_entry('url', url))
问题是我在第二次测试运行时遇到CSRF错误.查看Django REST Framework文档,我读到只有在使用基于会话的身份验证时才会触发CSRF错误.所以,我想我会尝试基本身份验证,根据Django的文档,只需要设置REMOTE_USER环境变量:
class UserApiTest(WebTest):
extra_environ = {'REMOTE_USER': 'admin'}
def setUp(self):
AdminFactory()
def test_accessing_user_list_shows_one_user(self):
user_list = self.app.get('/quickstart/users/')
assert_that(user_list.json, has_entry('count', 1))
def test_posting_new_user_returns_url_for_user_detail(self):
post_data = {'username': 'john', 'email': 'john.doe@example.com'}
user_create = self.app.post('/quickstart/users/', post_data)
url = 'http://localhost:80/quickstart/users/2/'
assert_that(user_create.json, has_entry('url', url))
这更糟糕,因为用户甚至没有被授权查看这些页面(即访问URL的返回403).
我的问题是:如何使用django_webtest正确设置基本身份验证?
解决方法:
在解决了这个问题之后,我发现我需要传递完整的基本身份验证标头,而不仅仅是REMOTE_USER.这是因为Django REST Framework在其BasicAuthentication后端中解析基本身份验证.
class UserApiTest(WebTest):
auth_password = base64.encodestring('admin:default').strip()
extra_environ = {
'AUTH_TYPE': 'Basic',
'HTTP_AUTHORIZATION': 'Basic {}'.format(auth_password),
'REMOTE_USER': 'admin'}
def setUp(self):
AdminFactory()
def test_accessing_user_list_shows_one_user(self):
user_list = self.app.get('/quickstart/users/')
assert_that(user_list.json, has_entry('count', 1))
def test_posting_new_user_returns_url_for_user_detail(self):
post_data = {'username': 'john', 'email': 'john.doe@example.com'}
user_create = self.app.post('/quickstart/users/', post_data)
url = 'http://localhost:80/quickstart/users/2/'
assert_that(user_create.json, has_entry('url', url))
此外,默认情况下,您应确保在测试中创建的任何用户都将is_staff标志设置为yes.当然,如果您将Django REST设置为具有不同的权限,则应确保正确设置这些权限.
我希望这可以帮助别人.
内容总结
以上是互联网集市为您收集整理的python – 如何使用django_webtest的基本身份验证来访问Django REST框架?全部内容,希望文章能够帮你解决python – 如何使用django_webtest的基本身份验证来访问Django REST框架?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。