POST-запрос iphone iphone к серверу Django создает QueryDict в QueryDict - PullRequest
6 голосов
/ 05 апреля 2010

Я создаю запрос JSON POST из Objective C с использованием библиотеки JSON следующим образом:

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 отправляется неправильно?

Ответы [ 3 ]

3 голосов
/ 22 сентября 2010

Это способ обработки запроса POST с данными 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 голос
/ 16 декабря 2014

Я уже имел дело с этой проблемой. Я нашел временное решение как чтение диктанта request.body. Я предполагаю, что вы уже импортировали библиотеку json/simplejson. На мой взгляд:

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

Этот блок кода помог мне пройти пост-выпуск. Я думаю, что публикация querydict в request.POST еще не разработана должным образом на NSMutableURLRequest.

0 голосов
/ 05 апреля 2010

Мой жестокий способ обойти мою проблему:

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']

Так что это позволит мне извлечь два значения JSON с дополнительным шагом на стороне сервера. Но это должно работать с одним шагом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...