来自iOS的Django HTTP Post请求

时间:2013-09-17 07:57:29

标签: ios django http

我正在使用Django REST框架。

@api_view(['POST'])
def image_params(request, format=None):
    if request.method == 'POST':
        print request.DATA
        size = request.POST.get('size')
        colour = request.POST.get('colour')
        get_clothes = Clothes.objects.filter( Q(clothescolour=colour) | Q(clothessize=size))
        serializer = ClothesSerializer(get_clothes, many=True)
        result = serializer.data
        print result
    return Response(result,status=status.HTTP_201_CREATED)

我正在使用POSTMAN客户端发送POST请求,其中form-data keycolourvaluered。它工作得很好,我得到了预期的结果。这就是print request.DATA的样子:

<QueryDict: {u'colour': [u'red']}>

当我从iOS发送实际请求时,print request.DATA看起来如图所示,我的过滤器查询失败。

{u'colour': u'red'}

以下是我在iOS中构建HTTP Post请求的方法:

NSDictionary* requestData = [NSDictionary dictionaryWithObjectsAndKeys:
                             @"red",
                             @"colour",
                             nil];

NSError *postError;
NSData *postData = [NSJSONSerialization dataWithJSONObject:requestData options:NSJSONWritingPrettyPrinted error:&postError];
[postRequest setHTTPMethod:@"POST"];
[postRequest setHTTPBody:postData];
[postRequest setValue:@"application/json;charset=utf-8" forHTTPHeaderField:@"Content-Type"];

我可以做些什么来完成这项工作?

1 个答案:

答案 0 :(得分:1)

使用POSTMAN,您将发送表单数据,而使用iOS,您可以发送json数据。 这就是为什么它的解析方式不同。 您需要在POSTMAN上设置Content-Type: application/json标头并发送原始数据:

  

{“color”:“black”}

通过这种方式,您将获得相同的dict格式。