Python 如何将NSDictionary发布到Django服务器
我想向Django服务器发送一个NSDictionary作为request.POST数据。我尝试了很多方法,并在这里研究了类似的问题,但没有一个有效。以下是我在客户端的内容: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
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)
谢谢,丹尼尔,这是我需要的一半。(见下文)非常感谢!谢谢,丹尼尔,这是我需要的一半。(见下文)非常感谢!