在Django测试框架中使用基本HTTP访问认证
在我的一些Django视图中,我创建了一个装饰器,用来进行基本的HTTP访问认证。不过,在写Django的测试用例时,我花了一些时间才弄明白怎么给视图进行认证。下面是我找到的方法,希望对某些人有帮助。
6 个回答
8
对于Python3,你可以把你的 用户名:密码
字符串进行base64编码:
base64.b64encode(b'username:password')
这样会返回字节数据,所以你需要用 .decode('ascii')
把它转换成ASCII字符串:
完整的例子:
import base64
from django.test import TestCase
class TestClass(TestCase):
def test_authorized(self):
headers = {
'HTTP_AUTHORIZATION': 'Basic ' +
base64.b64encode(b'username:password').decode("ascii")
}
response = self.client.get('/', **headers)
self.assertEqual(response.status_code, 200)
34
在你的Django测试案例中,你可以更新客户端的默认设置,让它包含你的HTTP基本认证的凭证。
import base64
from django.test import TestCase
class TestMyStuff(TestCase):
def setUp(self):
credentials = base64.b64encode('username:password')
self.client.defaults['HTTP_AUTHORIZATION'] = 'Basic ' + credentials
94
这是我怎么做的:
from django.test import Client
import base64
auth_headers = {
'HTTP_AUTHORIZATION': 'Basic ' + base64.b64encode('username:password'),
}
c = Client()
response = c.get('/my-protected-url/', **auth_headers)
注意:你还需要创建一个用户。