Même si ce n'est pas entièrement dans l'esprit SO, j'adore cette question, car j'ai eu le même problème quand j'ai commencé, alors je vais vous donner un petit guide. De toute évidence, vous ne comprenez pas les principes qui les sous-tendent (ne le prenez pas comme une offense, mais si vous le faisiez, vous ne le demanderiez pas).
Django est côté serveur . Cela signifie, disons qu'un client accède à une URL, que vous avez une fonction à l'intérieur views
qui rend ce qu'il voit et renvoie une réponse en HTML. Décomposons-le en exemples:
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'),
C'est un exemple des utilisations les plus simples. Aller à 127.0.0.1:8000/hello
signifie une requête à la hello()
fonction, va 127.0.0.1:8000/home
retourner index.html
et remplacer toutes les variables comme demandé (vous savez probablement tout cela maintenant).
Parlons maintenant d' AJAX . Les appels AJAX sont du code côté client qui effectue des requêtes asynchrones. Cela semble compliqué, mais cela signifie simplement qu'il fait une demande pour vous en arrière-plan, puis gère la réponse. Ainsi, lorsque vous effectuez un appel AJAX pour une URL, vous obtenez les mêmes données que celles que vous obtiendriez en tant qu'utilisateur se rendant à cet endroit.
Par exemple, un appel AJAX à 127.0.0.1:8000/hello
retournera la même chose que si vous le visitiez. Seulement cette fois, vous l'avez dans une fonction JavaScript et vous pouvez le gérer comme vous le souhaitez. Regardons un cas d'utilisation 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');
}
});
Le processus général est le suivant:
- L'appel est dirigé vers l'URL
127.0.0.1:8000/hello
comme si vous aviez ouvert un nouvel onglet et l'aviez fait vous-même.
- S'il réussit (code d'état 200), effectuez la fonction de réussite, qui alertera les données reçues.
- En cas d'échec, effectuez une fonction différente.
Maintenant, que se passerait-il ici? Vous obtiendrez une alerte avec «bonjour le monde». Que se passe-t-il si vous passez un appel AJAX à domicile? Même chose, vous recevrez une alerte indiquant <h1>Hello world, welcome to my awesome site</h1>
.
En d'autres termes, les appels AJAX n'ont rien de nouveau. Ils ne sont qu'un moyen pour vous de permettre à l'utilisateur d'obtenir des données et des informations sans quitter la page, et cela permet une conception fluide et très soignée de votre site Web. Quelques lignes directrices dont vous devriez prendre note:
- Apprenez jQuery . Je ne peux insister assez sur ce point. Il va falloir que vous le compreniez un peu pour savoir comment gérer les données que vous recevez. Vous aurez également besoin de comprendre une syntaxe JavaScript de base (non loin de python, vous vous y habituerez). Je recommande fortement les didacticiels vidéo d'Envato pour jQuery , ils sont excellents et vous mettront sur la bonne voie.
- Quand utiliser JSON? . Vous allez voir de nombreux exemples où les données envoyées par les vues Django sont en JSON. Je ne suis pas entré dans les détails à ce sujet, car il n'est pas important de savoir comment le faire (il y a beaucoup d'explications) et beaucoup plus important quand . Et la réponse est: les données JSON sont des données sérialisées. Autrement dit, les données que vous pouvez manipuler. Comme je l'ai mentionné, un appel AJAX récupère la réponse comme si l'utilisateur l'avait fait lui-même. Supposons maintenant que vous ne vouliez pas jouer avec tout le code HTML et que vous souhaitiez envoyer des données (une liste d'objets peut-être). JSON est bon pour cela, car il l'envoie en tant qu'objet (les données JSON ressemblent à un dictionnaire python), puis vous pouvez itérer dessus ou faire autre chose qui supprime la nécessité de passer au crible le html inutile.
- Ajoutez-le en dernier . Lorsque vous créez une application Web et que vous souhaitez implémenter AJAX, faites-vous plaisir. Tout d'abord, créez l'application entière complètement dépourvue de tout AJAX. Assurez-vous que tout fonctionne. Ensuite, et alors seulement, commencez à écrire les appels AJAX. C'est un bon processus qui vous aide également à apprendre beaucoup.
- Utilisez les outils de développement de Chrome . Étant donné que les appels AJAX sont effectués en arrière-plan, il est parfois très difficile de les déboguer. Vous devez utiliser les outils de développement Chrome (ou des outils similaires tels que Firebug) et des
console.log
choses à déboguer. Je ne vais pas expliquer en détail, juste google autour et découvrir à ce sujet. Ce serait très utile pour vous.
- Sensibilisation à la CSRF . Enfin, n'oubliez pas que les demandes de publication dans Django nécessitent le
csrf_token
. Avec les appels AJAX, vous souhaitez souvent envoyer des données sans rafraîchir la page. Vous rencontrerez probablement des problèmes avant de vous en souvenir - attendez, vous avez oublié d'envoyer le csrf_token
. Il s'agit d'un barrage routier débutant connu dans l'intégration AJAX-Django, mais après avoir appris à le rendre agréable à jouer, c'est aussi simple que ça.
C'est tout ce qui me vient à l'esprit. C'est un vaste sujet, mais oui, il n'y a probablement pas assez d'exemples. Il vous suffit de vous y rendre, lentement, vous finirez par l'obtenir.
csrf_token
, pouvons-nous contourner cette méthode? Si nous avions un exemple de fonction,ajaxCall()
nous pouvons simplement utiliser la méthode traditionnelle de quelque chose comme<form onsubmit='ajaxCall();return false;'>
, non?Plus loin de l'excellente réponse de yuvi, je voudrais ajouter un petit exemple spécifique sur la façon de gérer cela dans Django (au-delà de tout js qui sera utilisé). L'exemple utilise
AjaxableResponseMixin
et suppose un modèle d'auteur.Source: documentation Django, gestion des formulaires avec des vues basées sur les classes
Le lien vers la version 1.6 de Django n'est plus disponible mis à jour vers la version 1.11
la source
J'écris ceci parce que la réponse acceptée est assez ancienne, elle a besoin d'un rafraîchissement.
Voici donc comment j'intégrerais Ajax à Django en 2019 :) Et prenons un exemple réel de quand nous aurions besoin d'Ajax: -
Disons que j'ai un modèle avec des noms d'utilisateur enregistrés et avec l'aide d'Ajax, je veux savoir s'il existe un nom d'utilisateur donné.
html:
ajax:
urls.py:
views.py:
Aussi render_to_response qui est obsolète et a été remplacé par render et à partir de Django 1.7 et au lieu de HttpResponse, nous utilisons JsonResponse pour la réponse ajax. Parce qu'il est livré avec un encodeur JSON, vous n'avez donc pas besoin de sérialiser les données avant de renvoyer l'objet de réponse, mais il
HttpResponse
n'est pas obsolète.la source
Simple et sympa. Vous n'avez pas besoin de changer vos vues. Bjax gère tous vos liens. Découvrez ceci: Bjax
Usage:
Enfin, incluez ceci dans le HEAD de votre html:
Pour plus de paramètres, consultez la démo ici: Bjax Demo
la source
AJAX est le meilleur moyen d'effectuer des tâches asynchrones. Faire des appels asynchrones est quelque chose de courant dans tout bâtiment de site Web. Nous prendrons un court exemple pour savoir comment implémenter AJAX dans Django. Nous devons utiliser jQuery pour écrire moins de javascript.
Il s'agit de l' exemple Contact , qui est l'exemple le plus simple que j'utilise pour expliquer les bases d'AJAX et son implémentation dans Django. Nous allons faire une demande POST dans cet exemple. Je suis un exemple de cet article: https://djangopy.org/learn/step-up-guide-to-implement-ajax-in-django
models.py
Créons d'abord le modèle de Contact, avec des détails de base.
forms.py
Créez le formulaire pour le modèle ci-dessus.
views.py
Les vues ressemblent à la vue de création basée sur une fonction de base, mais au lieu de revenir avec le rendu, nous utilisons la réponse JsonResponse.
urls.py
Créons l'itinéraire de la vue ci-dessus.
modèle
En passant à la section frontend, restituez le formulaire créé au-dessus de la balise de formulaire englobante avec csrf_token et cliquez sur le bouton Soumettre. Notez que nous avons inclus la bibliothèque jquery.
Javascript
Parlons maintenant de la partie javascript, sur le formulaire soumis, nous faisons une demande ajax de type POST, en prenant les données du formulaire et en les envoyant côté serveur.
Ceci est juste un exemple de base pour démarrer avec AJAX avec django, si vous voulez plonger avec plusieurs autres exemples, vous pouvez parcourir cet article: https://djangopy.org/learn/step-up-guide-to- implement-ajax-in-django
la source
J'ai essayé d'utiliser AjaxableResponseMixin dans mon projet, mais je me suis retrouvé avec le message d'erreur suivant:
En effet, CreateView renvoie une réponse de redirection au lieu de renvoyer une réponse HttpResponse lorsque vous envoyez une demande JSON au navigateur. J'ai donc apporté quelques modifications à la
AjaxableResponseMixin
. Si la requête est une requête ajax, elle n'appellera pas lasuper.form_valid
méthode, il suffit d'appelerform.save()
directement.la source
Lorsque nous utilisons Django:
Si vous souhaitez conserver les anciennes données, vous pouvez le faire sans Ajax. (La page sera rafraîchie)
Ou vous pouvez le faire avec Ajax (la page ne sera pas actualisée)
Si vous utilisez Ajax, vous devez le faire:
Django est différent d'Ajax. La raison pour cela est la suivante:
À mon avis, si vous souhaitez utiliser ajax partout. lorsque vous devez d'abord initialiser une page avec des données, vous pouvez utiliser Django avec Ajax. Mais dans certains cas, vous avez juste besoin d'une page statique sans rien du serveur, vous n'avez pas besoin d'utiliser le modèle Django.
Si vous ne pensez pas que l'Ajax est la meilleure pratique. vous pouvez utiliser le modèle Django pour tout faire, comme l'anime.
(Mon anglais n'est pas bon)
la source