从Android发送POST json并在Django上接收

时间:2013-11-26 01:02:58

标签: android django post

我正在尝试使用Android应用程序与Django中的服务器进行交互 该应用程序试图将“json”数据发布到Django。但是,我无法在Django端收到该对象。 虽然发送的数据不是空白,但request.POST的值为<QueryDict: {}>。以下是来自android的POST请求的代码片段。

public static String POST(String url,JSONObject obj){
    InputStream inputStream = null;
    String result = "";
    try{            
        HttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);

        String json = obj.toString();
        StringEntity se = new StringEntity(json);
        httpPost.setEntity(se);

        httpPost.setHeader("Accept", "application/json");
        httpPost.setHeader("Content-type","application/json");

        HttpResponse httpResponse = httpClient.execute((HttpUriRequest)httpPost);
        inputStream = httpResponse.getEntity().getContent();

        if(inputStream!=null){
            result = convertInputStreamToString(inputStream);
        }else{
            result = "Did not work!";
        }
    }catch(Exception e){

    }

    return result;
}

修改
早些时候,我收到CSRF错误并以这种方式处理(我没有使用Django足以知道这是否是处理CSRF错误的正确方法)

@csrf_exempt
def search(request):  
  logger.debug(request.POST)
  """Code for JSON object processing"""

任何有关纠正问题的帮助都将受到高度赞赏。

1 个答案:

答案 0 :(得分:4)

好的,我的java不是很流利,但在我看来,你的请求已经很好了。

我认为问题在于您将数据作为json字符串发送而不是像原始表单一样。当你这样做时,数据不会显示在request.POST中,而是显示在request.body中,就像它一样:一个json字符串,而不是类似于形式的数据。

所以我认为你必须采取以下方式之一:

  1. 从Android应用程序发送数据作为表单(不像json)。这样您就可以在request.POST
  2. 中看到它
  3. request.body翻译成dict并使用它代替request.POST
  4. 希望这有帮助! :)