209 votos

Creación de una respuesta JSON usando Django y Python

Estoy tratando de convertir un servidor Ajax comando de respuesta en un Django HttpResponse, pero al parecer no está funcionando.

Este es el script del lado del servidor:

 /* 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.
        }
    }
}
 

Y este es el código convertido

 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))
 

Estoy usando simplejson para codificar la lista Python (por lo que voy a devolver una matriz JSON). Yo no podía entender el problema todavía. Pero creo que hice algo mal sobre el "eco".

486voto

Tom Puntos 7393

Yo suelo usar un diccionario, no una lista para devolver contenido JSON.

 import json

from django.http import HttpResponse

response_data = {}
response_data['result'] = 'failed'
response_data['message'] = 'You messed up'
return HttpResponse(json.dumps(response_data), content_type="application/json")
 

117voto

Dingo Puntos 1417

Yo uso este, que funcione bien.

 from django.utils import simplejson

def some_view(request):
    to_json = {
        "key1": "value1",
        "key2": "value2"
    }
    return HttpResponse(simplejson.dumps(to_json), mimetype='application/json')
 

Alternativa:

 from django.utils import simplejson

class JsonResponse(HttpResponse):
    """
        JSON response
    """
    def __init__(self, content, mimetype='application/json', status=None, content_type=None):
        super(JsonResponse, self).__init__(
            content=simplejson.dumps(content),
            mimetype=mimetype,
            status=status,
            content_type=content_type,
        )
 

En Django 1.7 JsonResponse objetos, se han añadido el framework Django en sí lo que hace que esta tarea sea aún más fácil:

 def some_view(request):
    return JsonResponse({"key": "value"})
 

98voto

srj Puntos 399

Nuevo en Django 1.7

usted podría utilizar JsonResponse objetos.

de la documentación:

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

12voto

Dmitry Demidenko Puntos 2118
 from django.http import HttpResponse
import json

class JsonResponse(HttpResponse):
    def __init__(self, content={}, mimetype=None, status=None,
             content_type='application/json'):
        super(JsonResponse, self).__init__(json.dumps(content), mimetype=mimetype,
                                           status=status, content_type=content_type)
 

Y en la vista:

 resp_data = {'my_key': 'my value',}
return JsonResponse(resp_data)
 

7voto

ReduxDJ Puntos 79

Usted querrá utilizar el serializador django para ayudar con cosas unicode:

 from django.core import serializers

json_serializer = serializers.get_serializer("json")()
    response =  json_serializer.serialize(list, ensure_ascii=False, indent=2, use_natural_keys=True)
    return HttpResponse(response, mimetype="application/json")
 

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X