我正在尝试使用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"""
任何有关纠正问题的帮助都将受到高度赞赏。
答案 0 :(得分:4)
好的,我的java不是很流利,但在我看来,你的请求已经很好了。
我认为问题在于您将数据作为json字符串发送而不是像原始表单一样。当你这样做时,数据不会显示在request.POST
中,而是显示在request.body
中,就像它一样:一个json字符串,而不是类似于形式的数据。
所以我认为你必须采取以下方式之一:
request.POST
或request.body
翻译成dict
并使用它代替request.POST
希望这有帮助! :)