Python 如何将NSDictionary发布到Django服务器

Python 如何将NSDictionary发布到Django服务器,python,ios,objective-c,django,Python,Ios,Objective C,Django,我想向Django服务器发送一个NSDictionary作为request.POST数据。我尝试了很多方法,并在这里研究了类似的问题,但没有一个有效。以下是我在客户端的内容: NSString *url = @"http://mycompany.com/myurl"; NSDictionary *testDict = @{@"key1": @"value1", @"key2": @"value2"}; NSError *error; if ([connectionController testP

我想向Django服务器发送一个NSDictionary作为request.POST数据。我尝试了很多方法,并在这里研究了类似的问题,但没有一个有效。以下是我在客户端的内容:

NSString *url = @"http://mycompany.com/myurl";
NSDictionary *testDict = @{@"key1": @"value1", @"key2": @"value2"};
NSError *error;
if ([connectionController testPost:url dictionary:testDict returningResponse:&response error:&error]) {
    NSLog(@"Success!");
}
connectionController
对象具有以下方法:

- (BOOL)testPost:(NSString *)url dictionary:(NSDictionary *)dict returningResponse:(NSDictionary **)response error:(NSError **)error {
    NSData *data = [NSJSONSerialization dataWithJSONObject:dict options:0 error:error];
    if (!data) {
        return NO;
    }
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];
    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:data];
    NSURLResponse *urlResponse = nil;
    NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:error];
    if (*error) {
        return NO;
    }
    *response = [NSJSONSerialization JSONObjectWithData:urlData options:NSJSONWritingPrettyPrinted error:error];
    return YES;
}
在我的Django服务器端:

def myurl_view_func(request):
    print "request = %s" % request
    key1 = request.POST.get('key1', None)
    print "key1 = %s" % key1
但是当执行时,服务器不接收NSDictionary。而是打印:

request = <WSGIRequest
path:/myurl/,
GET:<QueryDict: {}>,
POST:<QueryDict: {}>,
...[snip]...

key1 = None

request=我对Objective-C一无所知,但是如果你正在序列化字典并将其作为JSON发布,那么原始数据将在
request.body
,而不是
request.POST
中找到,但是如果你将字典序列化并将其作为JSON发布,那么原始数据将在
request.body
中找到,而不是
request.POST
Daniel Roseman的回答让我半途而废:查看
request.body
而不是
request.POST
。其余的是正确地解码
request.body
,作为一个JSON序列化字典

基本上,上面描述的客户端是好的。您只需按如下方式更改服务器:

from django.utils import simplejson

def myurl_view_func(request):
    data = simplejson.loads(request.body)
    key1 = data.get('key1', None)

丹尼尔·罗斯曼的回答让我半途而废:查看
request.body
而不是
request.POST
。其余的是正确地解码
request.body
,作为一个JSON序列化字典

基本上,上面描述的客户端是好的。您只需按如下方式更改服务器:

from django.utils import simplejson

def myurl_view_func(request):
    data = simplejson.loads(request.body)
    key1 = data.get('key1', None)

谢谢,丹尼尔,这是我需要的一半。(见下文)非常感谢!谢谢,丹尼尔,这是我需要的一半。(见下文)非常感谢!