2010-04-05 18 views
6

estoy creando una solicitud JSON post de Objective C utilizando la biblioteca JSON así:iphone solicitud POST al servidor JSON Django crea QueryDict dentro QueryDict

 
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 [email protected]"*"] forKey:@"bar"]; 

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

Cuando leí esta solicitud en mi Django ver el depurador muestra que tomó toda la cadena JSON y lo hizo la primera clave de la QueryDict POST:

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

puedo leer la primera clave y luego reanálisis utilizando JSON como un truco. Pero, ¿por qué la cadena JSON no se envía correctamente?

Respuesta

0

Mi truco cruel para solucionar mi problema es:

 
hack_json_value = request.POST.keys()[0] 
hack_query_dict = json.loads(hack_json_value) 
foo = hack_query_dict['foo'] 
bar = hack_query_dict['bar'] 

Así que esto me permitirá extraer los dos valores JSON con un paso adicional en el lado del servidor. Pero debería funcionar con un paso.

3

Esta es la manera de procesar una solicitud POST con los datos JSON:

def view_example(request): 
    data=simplejson.loads(request.raw_post_data) 

    #use the data 

    response = HttpResponse("OK") 
    response.status_code = 200 
    return response 
1

ya he tratado este tema. Encontré una solución temporal como leer el request.body dict. Supongo que ya importó la biblioteca json/simplejson. En mi punto de vista:

post = request.body 
post = simplejson.loads(post) 
foo = post["foo"] 

Este bloque de código me ayudó a pasar de emisión postal. Creo que publicar querydict en request.POST no se ha desarrollado correctamente en NSMutableURLRequest todavía.

Cuestiones relacionadas