Aunque esto no está enteramente en el espíritu SO, me encanta esta pregunta, porque tuve el mismo problema cuando comencé, así que te daré una guía rápida. Obviamente no entiendes los principios detrás de ellos (no lo tomes como una ofensa, pero si lo hicieras no lo estarías preguntando).
Django es del lado del servidor . Significa que, digamos que un cliente va a una URL, tiene una función dentro views
que representa lo que ve y devuelve una respuesta en HTML. Vamos a dividirlo en ejemplos:
views.py:
def hello(request):
return HttpResponse('Hello World!')
def home(request):
return render_to_response('index.html', {'variable': 'world'})
index.html:
<h1>Hello {{ variable }}, welcome to my awesome site</h1>
urls.py:
url(r'^hello/', 'myapp.views.hello'),
url(r'^home/', 'myapp.views.home'),
Ese es un ejemplo del uso más simple. Ir a 127.0.0.1:8000/hello
significa una solicitud a la hello()
función, ir a 127.0.0.1:8000/home
devolverá index.html
y reemplazará todas las variables según lo solicitado (probablemente ya sepa todo esto).
Ahora hablemos de AJAX . Las llamadas AJAX son código del lado del cliente que realiza solicitudes asincrónicas. Eso suena complicado, pero simplemente significa que hace una solicitud en segundo plano y luego maneja la respuesta. Entonces, cuando haces una llamada AJAX para alguna URL, obtienes los mismos datos que obtendrías como usuario yendo a ese lugar.
Por ejemplo, una llamada a AJAX 127.0.0.1:8000/hello
devolverá lo mismo que lo haría si la visitara. Solo que esta vez, lo tienes dentro de una función de JavaScript y puedes manejarlo como quieras. Veamos un caso de uso simple:
$.ajax({
url: '127.0.0.1:8000/hello',
type: 'get', // This is the default though, you don't actually need to always mention it
success: function(data) {
alert(data);
},
failure: function(data) {
alert('Got an error dude');
}
});
El proceso general es este:
- La llamada va a la URL
127.0.0.1:8000/hello
como si abriera una nueva pestaña y lo hiciera usted mismo.
- Si tiene éxito (código de estado 200), realice la función para el éxito, que alertará a los datos recibidos.
- Si falla, realice una función diferente.
¿Y ahora qué pasaría aquí? Recibirías una alerta con 'hola mundo' en él. ¿Qué sucede si haces una llamada AJAX a casa? Lo mismo, recibirá una alerta que indica <h1>Hello world, welcome to my awesome site</h1>
.
En otras palabras, no hay nada nuevo sobre las llamadas AJAX. Son solo una forma de permitir que el usuario obtenga datos e información sin salir de la página, y permite un diseño suave y muy ordenado de su sitio web. Algunas pautas que debe tener en cuenta:
- Aprende jQuery . No puedo enfatizar esto lo suficiente. Tendrás que entenderlo un poco para saber cómo manejar los datos que recibes. También necesitará comprender alguna sintaxis básica de JavaScript (no muy lejos de Python, se acostumbrará). Recomiendo encarecidamente los videos tutoriales de Envato para jQuery , son geniales y lo pondrán en el camino correcto.
- ¿Cuándo usar JSON? . Verá muchos ejemplos en los que los datos enviados por las vistas de Django están en JSON. No entré en detalles sobre eso, porque no es importante cómo hacerlo (hay muchas explicaciones abundantes) y mucho más importante cuando . Y la respuesta a eso es: los datos JSON son datos serializados. Es decir, datos que puede manipular. Como mencioné, una llamada AJAX buscará la respuesta como si el usuario lo hiciera él mismo. Ahora digamos que no desea meterse con todo el html, y en su lugar desea enviar datos (quizás una lista de objetos). JSON es bueno para esto, porque lo envía como un objeto (los datos JSON se ven como un diccionario de Python), y luego puede iterar sobre él o hacer otra cosa que elimine la necesidad de filtrar html inútil.
- Añádelo al final . Cuando crea una aplicación web y desea implementar AJAX, hágase un favor. Primero, compila toda la aplicación completamente desprovista de AJAX. Ver que todo está funcionando. Entonces, y solo entonces, comience a escribir las llamadas AJAX. Ese es un buen proceso que también te ayuda a aprender mucho.
- Utiliza las herramientas de desarrollador de Chrome . Dado que las llamadas AJAX se realizan en segundo plano, a veces es muy difícil depurarlas. Debe usar las herramientas de desarrollador de Chrome (o herramientas similares como Firebug) y
console.log
cosas para depurar. No lo explicaré en detalle, solo busque en Google y descubra al respecto. Sería muy útil para ti.
- Conciencia CSRF . Finalmente, recuerde que las solicitudes de publicación en Django requieren el
csrf_token
. Con las llamadas AJAX, muchas veces le gustaría enviar datos sin actualizar la página. Probablemente enfrentará algunos problemas antes de que finalmente lo recuerde: espere, olvidó enviar el csrf_token
. Este es un obstáculo para principiantes conocido en la integración de AJAX-Django, pero después de que aprenda cómo hacer que funcione bien, es fácil.
Eso es todo lo que se me ocurre. Es un tema vasto, pero sí, probablemente no haya suficientes ejemplos por ahí. Solo trabaje hasta allí, lentamente, lo obtendrá eventualmente.
csrf_token
, ¿podemos evitar este método? Si tuviéramos una función de ejemplo,ajaxCall()
podemos usar el método tradicional de algo así<form onsubmit='ajaxCall();return false;'>
, ¿verdad?Además de la excelente respuesta de yuvi, me gustaría agregar un pequeño ejemplo específico sobre cómo lidiar con esto dentro de Django (más allá de cualquier js que se utilizará). El ejemplo usa
AjaxableResponseMixin
y asume un modelo de Autor.Fuente: documentación de Django, manejo de formularios con vistas basadas en clases
El enlace a la versión 1.6 de Django ya no está disponible actualizado a la versión 1.11
fuente
Estoy escribiendo esto porque la respuesta aceptada es bastante antigua, necesita un repaso.
Así es como integraría Ajax con Django en 2019 :) Y tomemos un ejemplo real de cuándo necesitaríamos Ajax: -
Digamos que tengo un modelo con nombres de usuario registrados y con la ayuda de Ajax quiero saber si existe un nombre de usuario determinado.
html:
ajax:
urls.py:
views.py:
También render_to_response que está en desuso y ha sido reemplazado por render y desde Django 1.7 en adelante en lugar de HttpResponse , usamos JsonResponse para la respuesta ajax. Debido a que viene con un codificador JSON, no necesita serializar los datos antes de devolver el objeto de respuesta, pero
HttpResponse
no está en desuso.fuente
Simple y agradable No tiene que cambiar sus puntos de vista. Bjax maneja todos sus enlaces. Mira esto: Bjax
Uso:
Finalmente, incluya esto en el HEAD de su html:
Para más configuraciones, vea la demostración de pago aquí: Demo Bjax
fuente
AJAX es la mejor manera de hacer tareas asincrónicas. Hacer llamadas asincrónicas es algo común en el uso de cualquier sitio web. Tomaremos un breve ejemplo para aprender cómo podemos implementar AJAX en Django. Necesitamos usar jQuery para escribir menos javascript.
Este es el ejemplo de contacto , que es el ejemplo más simple que estoy usando para explicar los conceptos básicos de AJAX y su implementación en Django. Haremos una solicitud POST en este ejemplo. Estoy siguiendo uno de los ejemplos de esta publicación: https://djangopy.org/learn/step-up-guide-to-implement-ajax-in-django
modelos.py
Primero creemos el modelo de Contacto, que tiene detalles básicos.
formas.py
Cree el formulario para el modelo anterior.
views.py
Las vistas se parecen a la vista de creación basada en funciones básicas, pero en lugar de regresar con render, estamos utilizando la respuesta JsonResponse.
urls.py
Creemos la ruta de la vista anterior.
modelo
Pasando a la sección frontend, renderice el formulario que se creó encima de la etiqueta del formulario junto con csrf_token y el botón de enviar. Tenga en cuenta que hemos incluido la biblioteca jquery.
Javascript
Hablemos ahora de la parte de JavaScript, en el envío del formulario estamos haciendo una solicitud ajax de tipo POST, tomando los datos del formulario y enviando al lado del servidor.
Este es solo un ejemplo básico para comenzar a usar AJAX con django, si desea sumergirse con varios ejemplos más, puede leer este artículo: https://djangopy.org/learn/step-up-guide-to- implementar-ajax-en-django
fuente
Intenté usar AjaxableResponseMixin en mi proyecto, pero terminé con el siguiente mensaje de error:
Esto se debe a que CreateView devolverá una respuesta de redireccionamiento en lugar de devolver una HttpResponse cuando envíe una solicitud JSON al navegador. Así que he realizado algunos cambios en el
AjaxableResponseMixin
. Si la solicitud es una solicitud ajax, no llamará alsuper.form_valid
método, solo llame alform.save()
directamente.fuente
Cuando usamos Django:
Si desea conservar datos antiguos, puede hacerlo sin Ajax. (La página se actualizará)
O puede hacerlo con Ajax (la página no se actualizará)
Si usa Ajax, debe hacer lo siguiente:
Django es diferente de Ajax. La razón de esto es la siguiente:
En mi opinión, si desea utilizar ajax en todas partes. cuando necesita inicializar una página con datos al principio, puede usar Django con Ajax. Pero en algunos casos, solo necesita una página estática sin nada del servidor, no necesita usar la plantilla Django.
Si no crees que Ajax es la mejor práctica. puedes usar la plantilla de Django para hacer todo, como el anime.
(Mi inglés no es bueno)
fuente