使用Django和Python创建JSON响应

  • 问题:
  • 我试图将服务器端的Ajax响应脚本转换为Django-HttpResponse,但显然它不起作用

    这是服务器端脚本:

    /* RECEIVE VALUE */
    $validateValue=$_POST['validateValue'];
    $validateId=$_POST['validateId'];
    $validateError=$_POST['validateError'];

    /* RETURN VALUE */
    $arrayToJs = array();
    $arrayToJs[0] = $validateId;
    $arrayToJs[1] = $validateError;

    if($validateValue =="Testuser"){ // Validate??
    $arrayToJs[2] = "true"; // RETURN TRUE
    echo '{"jsonValidateReturn":'.json_encode($arrayToJs).'}'; // RETURN ARRAY WITH success
    }
    else{
    for($x=0;$x<1000000;$x++){
    if($x == 990000){
    $arrayToJs[2] = "false";
    echo '{"jsonValidateReturn":'.json_encode($arrayToJs).'}'; // RETURNS ARRAY WITH ERROR.
    }
    }
    }

    这是转换后的代码

    def validate_user(request):
    if request.method == 'POST':
    vld_value = request.POST.get('validateValue')
    vld_id = request.POST.get('validateId')
    vld_error = request.POST.get('validateError')

    array_to_js = [vld_id, vld_error, False]

    if vld_value == "TestUser":
    array_to_js[2] = True
    x = simplejson.dumps(array_to_js)
    return HttpResponse(x)
    else:
    array_to_js[2] = False
    x = simplejson.dumps(array_to_js)
    error = 'Error'
    return render_to_response('index.html',{'error':error},context_instance=RequestContext(request))
    return render_to_response('index.html',context_instance=RequestContext(request))

    我使用simplejson对Python列表进行编码(因此它将返回一个JSON数组)。我还没弄清楚这个问题。但我觉得我在“回声”上做错了什么

  • 答案:
  • 我通常使用字典,而不是列表来返回JSON内容。在

    import json

    from django.http import HttpResponse

    response_data = {}
    response_data['result'] = 'error'
    response_data['message'] = 'Some error message'

    在Django 1.7之前,您应该这样返回它:

    return HttpResponse(json.dumps(response_data), content_type="application/json")

    对于Django 1.7+,使用JsonResponseas shown in就像这样:

    from django.http import JsonResponse
    return JsonResponse({'foo':'bar'})