【发布时间】:2014-12-07 17:03:51
【问题描述】:
我正在使用 Django Rest 框架。在权限类中,我检查两个自定义 http 标头的值:mt_api_token 和 mt_api_key。
在测试中,我使用自定义标头调用 API。 sign_request() 返回{'mt_api_key': api_client.client_id, 'mt_api_token': token}。
class APIv1SimpleTestCase(APITestCase):
[...]
response = self.client.get(url, format='json', **sign_request("", api_client=oauth2_client))
这是一个遗留系统,标题必须有下划线而不是破折号。
权限类:
class AuthPermissions(permissions.BasePermission):
def is_token_valid(self, request):
mt_api_token = request.META['mt_api_token']
[...]
测试通过。 但是,如果我使用 httpie 调用 api:
$ http :8000/api/v1/endpoint1/ mt_api_key:0a9..66 mt_api_token:7b2...8
我得到 keyError 异常,因为 request.META['mt_api_key'] 和 request.META['mt_api_token'] 不存在。
我必须使用request.META['HTTP_MT_API_TOKEN'],根据DRF documentation for request.META,这是有道理的,但我无法找出测试通过的原因。如果我将实现更改为 request.META['HTTP_...'] 我的测试将失败。
【问题讨论】:
标签: django http-headers django-rest-framework