【发布时间】:2018-09-29 06:10:50
【问题描述】:
我有一个 Django Rest API,然后分别有一个使用这个 API 的客户端。
我使用客户端中的请求传递自定义标头:
r = requests.get(url, params=params, headers={'license': '12345'})
然后在 API 中,在我的自定义权限中,我得到如下标题:
app_license = request.META['HTTP_LICENSE']
出于安全原因,我知道 django rewrites the custom headers,所以它工作正常。
我的问题是当我在 Django rest API 中编写单元测试时:
response = self.client.get(self.url, params=params, headers={'license': '12345'})
然后它升起:
KeyError: 'HTTP_LICENSE'
但是如果我像这样更改代码,测试通过没有问题,但消费者不起作用:
request.META['headers']['license']
我可以检查是否有'headers'键,但我不想仅仅为了通过单元测试而更改代码,它必须是某种方式来编写符合现实的单元测试,对吧?
我尝试使用:
from django.test import TestCase
还有:
from rest_framework.test import APITestCase
两者的结果相同。有什么解决办法吗?谢谢!
【问题讨论】:
-
如果你在
self.client.get调用中传入HTTP_LICENSE,它的表现是否如你所愿? -
@sam 如果我在 self.client.get 中将 HTTP_LICENSE 作为标头传递,则可以使用 request.META['headers']['HTTP_LICENSE'] 检索它,这不是相同的行为与消费者请求一样:(。
-
@sam 我按照你说的尝试了:self.client.get(self.url, params=params, HTTP_LICENSE='12345') 并且成功了。谢谢!
标签: python django rest django-rest-framework