我在这个问题上遇到了一些麻烦,request.data 有时是一个dict
(尤其是在测试时),有时是一个QueryDict
实例(在使用 curl 时)。
这尤其是一个问题,因为使用 curl 调用视图时显然存在很大差异,如下所示:
curl -X POST --data "some_float=1.23456789012123123" "http://localhost:8000/myview"
或者像这样使用 django_webtest 客户端:
class APIViewTest(WebTest):
def test_testsomething(self):
self.app.post(url=url, params=json.dumps({some_float=1.26356756467}))
然后将 QueryDict 转换为这样的字典
new_dict = dict(**request.data)
my_float = float(new_dict['some_float'])
在测试中一切正常,因为有request.data
一个dict
,但在生产中视图崩溃,因为new_dict['some_float']
实际上是一个包含一个元素的列表,而不是预期的浮动。
我考虑过像这样解决问题:
if type(request.data) is dict:
new_dict = dict(**request.data)
else:
new_dict = dict(**request.data.dict())
这感觉非常错误,因为测试只会测试第 2 行,并且(一些?全部?)生产代码将运行第 4 行。
因此,当我想知道为什么 QueryDict 会以这种方式运行时,我宁愿首先知道 response.data 的原因和时间QueryDict
。以及我如何使用 django 测试来模拟这种行为。生产和测试系统的条件不同总是很麻烦,有时是不可避免的,但在这种情况下,我觉得它可以解决。或者这是与 django_webtest 相关的特定问题?