Django Test Client尝试嵌套JSON

fan*_*err 7 django django-testing

我遇到的问题非常类似于Django的Querydict奇怪的行为:将POST字典串入单个键单元测试Django JSON View.但是,这些线程中的问题/响应都没有真正指出我遇到的指定问题.我正在尝试使用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'}})
Run Code Online (Sandbox Code Playgroud)

如您所见,我的请求数据中有一个嵌套的JSON对象.但是,这就是request.POST的样子:

<QueryDict: {u'phoneNumber': [u'+15551234567'], u'pinNumber': [u'4171'], u'deviceInfo': [u'deviceType', u'deviceID']}>
Run Code Online (Sandbox Code Playgroud)

尝试#2:然后我尝试了,添加了content-type参数,如下所示:

response = c.post('/verifyNewMobileUser/', 
    {'phoneNumber': user.get_profile().phone_number,
     'pinNumber': user.get_profile().pin,
     'deviceInfo': {'deviceID': '68753A44-4D6F-1226-9C60-0050E4C00067', 'deviceType': 'I'}},
    'application/json')
Run Code Online (Sandbox Code Playgroud)

我现在要求的是什么.POST是

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

我想要做的就是为我的请求数据指定一个嵌套的dict.是否有捷径可寻?

Jas*_*son 17

以下适用于我(使用命名args):

geojson = {
        "type": "Point",
        "coordinates": [1, 2]
    }

    response = self.client.post('/validate', data=json.dumps(geojson),
                                content_type='application/json')
Run Code Online (Sandbox Code Playgroud)


Ste*_*haw 6

您的问题表明Django正在解释您的请求multipart/form-data而不是application/json.尝试

c.post("URL", "{JSON_CONTENT}", content_type="application/json").

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