2009-03-07 21 views
20

lo tanto, estoy empezando a usar jQuery con uno de mis proyectos de Django, pero tengo una pregunta bastante noobie.Django + Ajax

En una Django ver lo que tiene que devolver un objeto HttpResponse de la vista, pero a veces no tienen que devolver nada. Por ejemplo, podría estar actualizando la base de datos a través de ajax y no necesito enviar nada de vuelta. Entonces mi pregunta es, ¿qué haces en esa situación?

Gracias

Respuesta

37

respuesta Un HTTP es más que enviar contenido al navegador. Una respuesta está asociada con un código de estado y varios encabezados HTTP. Además, una respuesta puede contener un cuerpo (contenido real).

creo que está bien para enviar un objeto HttpResponse sin cuerpo. Es decir:

return HttpResponse() 

Esto enviará una respuesta HTTP con código de estado 200 OK, que es exactamente lo que ocurrió en el lado del servidor, es decir, la operación tuvo éxito, todo está bien. Aunque hay mejores formas, mira a continuación.

Restfully hablando, cuando la operación encontró problemas, debe devolver una respuesta HTTP con un status code apropiado. Como uno de los códigos de estado 5XX que designa los errores del lado del servidor.

Ahora, mirando a todos esos códigos de estado HTTP vemos un código de estado Creado 201, que es un código más apropiado que el 200 OK cuando haya que almacenar datos POST en algún lugar, como una base de datos. En este caso, usted debe hacer algo como esto en su opinión:

return HttpResponse(status=201) 

Y, como alguien ya se ha mencionado, se puede tomar ventaja de estos códigos de estado en su JavaScript para que pueda presentar a un usuario un mensaje más informativo o tal vez elija alguna otra estrategia para sus solicitudes.

0

que volvería una cadena vacía:

return HttpResponse("") 
5

aún desea devolver un HttpResponse dejar jQuery sabe si la respuesta fue un éxito o un fracaso. La mayoría de las bibliotecas de JavaScript que incluyen jQuery buscan una respuesta de 200 ok. Sin mencionar que podría ser útil devolver un objeto JSON con el número de filas afectadas o la cuenta de un voto.

0

Gracias por las respuestas. El ejemplo en el que estoy trabajando actualmente es una lista de tareas pendientes, donde el usuario puede arrastrar elementos a una nueva posición. Estoy usando jQuery para enviar datos de publicaciones a la vista, lo que guarda la nueva orden en la base de datos. Para este ejemplo, no quiero mostrar una respuesta al usuario después de que haya recurrido a la lista porque se volvería molesto y no es realmente necesario. Capturaré cualquier error si ocurre y mostraré al usuario una respuesta apropiada si eso sucede.

¿Entonces usar return HttpResponse(status=201) es una buena idea en este escenario?

+0

creo que 201 significa que ha creado algo, y entonces se podría devolver un 200 si sólo hay que mover algo alrededor. –

0

Lo sentimos, no puedo comentar todavía.

Los códigos de estado HTTP son una excelente forma de agregar información adicional (como lo demuestra REST).Vea aquí los que no son de 200, 404 o 500:

RFC2616

Cheers,