Django测试客户端压缩嵌套JSON

Django测试客户端压缩嵌套JSON,django,django-testing,Django,Django Testing,我的问题与和非常相似。然而,这些线程中的问题/回答都没有真正指向我遇到的问题。我正在尝试使用Django的测试客户端发送一个带有嵌套JSON对象的请求(我所拥有的可以很好地处理带有非JSON值的JSON对象) 尝试#1:这是我的初始代码: response = c.post('/verifyNewMobileUser/', {'phoneNumber': user.get_profile().phone_number, 'pinNumber': use

我的问题与和非常相似。然而,这些线程中的问题/回答都没有真正指向我遇到的问题。我正在尝试使用Django的测试客户端发送一个带有嵌套JSON对象的请求(我所拥有的可以很好地处理带有非JSON值的JSON对象)

尝试#1:这是我的初始代码:

    response = c.post('/verifyNewMobileUser/', 
        {'phoneNumber': user.get_profile().phone_number,
         'pinNumber': user.get_profile().pin,
         'deviceInfo': {'deviceID': '68753A44-4D6F-1226-9C60-0050E4C00067', 'deviceType': 'I'}})
如您所见,我的请求数据中有一个嵌套的JSON对象。但是,request.POST看起来是这样的:

<QueryDict: {u'phoneNumber': [u'+15551234567'], u'pinNumber': [u'4171'], u'deviceInfo': [u'deviceType', u'deviceID']}>
我现在得到的请求是

<QueryDict: {u"{'deviceInfo': {'deviceType': 'I', 'deviceID': '68753A44-4D6F-1226-9C60-0050E4C00067'}, 'pinNumber': 5541, 'phoneNumber': u' 15551234567'}": [u'']}>


我只想为我的请求数据指定一个嵌套的dict。有没有一种简单的方法可以做到这一点?

您的问题表明Django将您的请求解释为
多部分/表单数据
,而不是
应用程序/json
。试一试

c.post(“URL”,“{JSON\u CONTENT}”,CONTENT\u type=“application/JSON”)


另一件需要注意的事情是,Python在呈现为字符串时使用单引号表示字典键/值,这是simplejson解析器不喜欢的。将硬编码的JSON对象保持为单引号字符串,在内部使用双引号来解决此问题…

以下内容对我很有用(使用命名参数):


我的解决方案如下:

在试验方法中:

data_dict = {'phoneNumber': user.get_profile().phone_number,
             'pinNumber': user.get_profile().pin,
             'deviceInfo':
                 {'deviceID': '68753A44-4D6F-1226-9C60-0050E4C00067',
                  'deviceType': 'I'}})

self.client.post('/url/', data={'data': json.dumps(data_dict)})
他认为:

json.loads(request.POST['data'])
这将以字符串形式发送post['data']。在视图中,必须从该字符串加载json


谢谢。

JSON.dumps是最好的方法。这应该是公认的答案。
data_dict = {'phoneNumber': user.get_profile().phone_number,
             'pinNumber': user.get_profile().pin,
             'deviceInfo':
                 {'deviceID': '68753A44-4D6F-1226-9C60-0050E4C00067',
                  'deviceType': 'I'}})

self.client.post('/url/', data={'data': json.dumps(data_dict)})
json.loads(request.POST['data'])