我正在使用Django Rest框架。在权限类中,我检查两个自定义http头的值:mt_api_token
和mt_api_key
。自定义HTTP标头是不同的测试和httpie
在测试中,我使用自定义标题调用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 _...']我的测试失败。
嗨@kevinbrown我不想改变sign_request方法,但没有确定它是否合理。感谢这个奇妙的解释 – 2014-12-08 20:50:48