我将以下NSMutableDictionary
作为AFNetworking
的参数从iPhone应用程序(IOS 6.1)传递到Django服务器
NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init];
[parameters setObject:[self getProductDictionary] forKey:@"prodDic"];
[parameters setObject:ApplicationDelegate.userUniqueId forKey:@"userID"];
[manager POST:BaseURLString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {...}
-(void) getProductDictionary
{
NSMutableDictionary *products = [[NSMutableDictionary alloc] init];
[products setObject:@"aaa" forKey:@"prod1"];
[products setObject:@"vvv" forKey:@"prod2"];
[products setObject:@"bbb" forKey:@"prod3"];
}
在服务器中我有以下观点:
import json
def foo(request):
if request.method == 'POST':
user_id = request.POST['userID']
products=json.loads(request.POST['prodDic'])
return HttpResponse("Done")
以下行记错了错误products=json.loads(request.POST['prodDic'])
,错误是:raise MultiValueDictKeyError(repr(key)) MultiValueDictKeyError: "'prodDic'"
for debug我删除了该行并添加了以下代码:
#for debug
for key in request.POST:
value = request.POST[key]
print value
键如下: prodDic [prod1]
如何将字典收到产品中,以便我可以像这样运行:
for key in products:
value = products[key]
答案 0 :(得分:1)
请求对象GET和POST可以包含多个相同键的值。作为一些HTML表单元素,值得注意的是,为同一个键传递多个值。
您正在将request.POST对象传递给JSON序列化程序,该序列化程序不允许多个具有相同名称的键。因此,请检查您的request.POST数据,看看您是否获得了多个具有相同名称的密钥。如果是,则必须在传递给JSON加载函数之前处理此数据。
我希望它会给你一些解决问题的指示
答案 1 :(得分:1)
这是我最终发现的......问题从目标c开始,将字典传递给AFNetworking导致服务器端的搞笑外观密钥所以
这是我更新的工作代码:
NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init];
[parameters setObject:[self getProductDictionary] forKey:@"prodDic"];
[parameters setObject:ApplicationDelegate.userUniqueId forKey:@"userID"];
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:parameters options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
[manager POST:BaseURLString parameters:[[NSDictionary alloc] initWithObjectsAndKeys:jsonString, @"root",nil] success:^(AFHTTPRequestOperation *operation, id responseObject) {...}
然后在服务器端:
import json
def foo(request):
if request.method == 'POST':
request_data=json.loads(request.POST['root'])
products=request_data['prodDic']
for key in products:
value=products[key]
#do my stuff
return HttpResponse("Done")
希望这能节省一些时间和时间。痛苦:)