我正在使用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