相关疑难解决方法(0)

Django Test Client尝试嵌套JSON

我遇到的问题非常类似于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.是否有捷径可寻?

django django-testing

7
推荐指数
2
解决办法
2545
查看次数

对Django服务器的iphone Json POST请求在QueryDict中创建QueryDict

我正在使用JSON库从Objective C创建一个JSON POST请求,如下所示:

NSMutableURLRequest *request;
request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@/%@/", host, action]]];
[request setHTTPMethod:@"POST"];
[request setValue:@"application/json-rpc" forHTTPHeaderField:@"Content-Type"];
NSMutableDictionary *requestDictionary = [[NSMutableDictionary alloc] init];
[requestDictionary setObject:[NSString stringWithString:@"12"] forKey:@"foo"];
[requestDictionary setObject:[NSString stringWithString@"*"] forKey:@"bar"];

NSString *theBodyString = requestDictionary.JSONRepresentation;
NSData *theBodyData = [theBodyString dataUsingEncoding:NSUTF8StringEncoding];   
[request setHTTPBody:theBodyData];  
[[NSURLConnection alloc] initWithRequest:request delegate:self];

当我在Django视图中读取此请求时,调试器显示它占用了整个JSON字符串并使其成为POST QueryDict的第一个键:

POST    QueryDict: QueryDict: {u'{"foo":"12","bar":"*"}': [u'']}>   Error   Could not resolve variable

我可以读取第一个键,然后使用JSON作为黑客重新解析.但为什么JSON字符串没有正确发送?

iphone django json objective-c

6
推荐指数
1
解决办法
3050
查看次数

如何使用XHR通过POST将数据作为键 - 值对而不是字符串发送

我正在创建两个POST调用.一个使用django形式,一个使用角度js通过资源xhr.

角度设置如下所示:

myModule.factory('gridData', function($resource) {
    //define resource class
    var root = {{ root.pk }};
    var csrf = '{{ csrf_token }}';
    return $resource('{% url getJSON4SlickGrid root.pk %}:wpID/', {wpID:'@id'},{
            get: {method:'GET', params:{}, isArray:true},
            update:{method:'POST', headers: {'X-CSRFToken' : csrf }}
    });
});
Run Code Online (Sandbox Code Playgroud)

通过创建xhr post请求:

item.$update();
Run Code Online (Sandbox Code Playgroud)

此post请求按预期发送到服务器,但是当我想访问QueryDict时,我无法访问传递的数据:

name = request.POST.get('name', None)
Run Code Online (Sandbox Code Playgroud)

name总是None这样.

这背后的问题是QueryDict对象被解析得很奇怪.

 print request.POST
<QueryDict: {u'{"name":"name update","schedule":0"}':[u'']}>
Run Code Online (Sandbox Code Playgroud)

虽然我会期望这个结果,当我通过"正常"的Post请求发送数据时,我得到了这个结果:

<QueryDict: {u'name': [u'name update'], u'schedule': [u'0']}>
Run Code Online (Sandbox Code Playgroud)

所以似乎Django在POST请求中收到一些东西,指示Django将参数解析为一个字符串.知道如何规避这个吗?

更新:

我发现这个讨论,他们说问题是如果你提供除MULTIPART_CONTENT以外的任何内容类型,参数将被解析为一个字符串.我检查了内容类型发送与POST请求,它确实设置为'CONTENT_TYPE': 'application/json;charset=UTF-8'.因此,这可能是问题所在.因此我的问题是:如何为使用angular.js资源创建的xhr post请求设置CONTENT_TYPE MULTIPART_CONTENT

django post xmlhttprequest angularjs

3
推荐指数
1
解决办法
2365
查看次数