Estoy tratando de convertir un script de respuesta Ajax del lado del servidor en Django HttpResponse, pero aparentemente no funciona.
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 de Python (por lo que devolverá una matriz JSON). No pude resolver el problema todavía. Pero creo que hice algo mal con el 'eco'.
@ajax_request
.Respuestas:
Usualmente uso un diccionario, no una lista para devolver contenido JSON.
Pre-Django 1.7 lo devolverías así:
Para Django 1.7+, use
JsonResponse
como se muestra en esta respuesta SO así:fuente
Nuevo en django 1.7
podrías usar objetos JsonResponse .
de los documentos:
fuente
ensure_ascii
y todavía no he encontrado una manera de anularlo. Creé una nueva pregunta para esto: stackoverflow.com/q/34798703/854477json_dumps_params={"ensure_ascii": False}
(requiere Django 1.9 o más reciente)Yo uso esto, funciona bien.
Alternativa:
En Django 1.7 , se han agregado objetos JsonResponse al propio marco de Django, lo que hace que esta tarea sea aún más fácil:
fuente
from django.utils import simplejson
es por compatibilidad con versiones anteriores.JsonResponse(status=404, data={'status':'false','message':message})
Desde Django 1.7 tienes un JsonResponse estándar que es exactamente lo que necesitas:
Ni siquiera necesita json.dump su matriz.
fuente
Y a la vista:
fuente
Para aquellos que usan Django 1.7+
documentos oficiales
fuente
Querrá usar el serializador de django para ayudar con cosas unicode:
fuente
Con las vistas basadas en Django Class puedes escribir:
y con Django-Rest-Framework puedes escribir:
fuente
Es muy conveniente con Django versión 1.7 o superior, ya que tiene la clase JsonResponse, que es una subclase de HttpResponse.
Para versiones anteriores de Django, debe usar un objeto HttpResponse.
fuente
¿Cómo usar el motor de aplicaciones de google con ajax (json)?
Código Javascript con JQuery:
Code Python
fuente
Esta es mi versión preferida usando una vista basada en clases. Simplemente subclasifique la Vista básica y anule el método get ().
fuente
Código Django
views.py
:Código HTML
view.html
:fuente
Primero importe esto:
Si ya tienes el JSON:
Si obtiene el JSON de otra solicitud HTTP:
fuente
Utilice JsonResponse
fuente
En View usa esto:
para obtener mensajes de validación sin html
fuente