## Implémenter facilement une communication asynchrone robuste avec le serveur {#sec-b77e387924b4}
[[HTMX]] permet d'implémenter de puissantes fonctionnalités asynchrones dans des frameworks de développement web côté serveur comme Django, sans la complexité de [[JavaScript]]. Dans cet article, nous allons explorer les **principes internes de traitement des requêtes Ajax par HTMX** et les **méthodes de communication concrètes avec les vues Django** à travers des exemples pratiques.

## Le cœur de [[HTMX]] : le HTML est le message {#sec-fcb60a4b40b4}
Les communications Ajax traditionnelles (par exemple, avec axios ou fetch) impliquent de recevoir des données JSON du serveur, puis de les interpréter avec JavaScript pour redessiner l'écran. Cependant, HTMX adhère au principe **'Hypermedia as the Engine of Application State (HATEOAS)'**. Cela signifie que le serveur envoie des **fragments HTML complets** au lieu de données (JSON), et HTMX se contente de les 'remplacer' à l'emplacement spécifié.
**Les 4 étapes de la communication Ajax avec HTMX**
1. **Déclenchement de l'événement :** L'utilisateur interagit avec un élément HTML (bouton, etc.).
2. **Requête Ajax :** HTMX appelle l'API `fetch` du navigateur pour envoyer une requête au serveur.
3. **Réponse HTML :** Après avoir traité la logique, le serveur renvoie uniquement le **fragment HTML nécessaire**, et non la page entière.
4. **Remplacement DOM (Swap) :** HTMX insère immédiatement le HTML reçu dans l'élément spécifié par `hx-target`.
## Exemple pratique : implémenter un bouton "J'aime" {#sec-5eb5b07b3b51}
Au-delà du simple changement de nombre, voyons comment les fragments HTML sont échangés entre le serveur et le client.
### 1. Frontend (Template) {#sec-cad7db10ba2b}
Voici comment envoyer une requête avec `hx-post` et remplacer l'intégralité de `#like-section` par la réponse du serveur.
```html
```
Comme le montre cet exemple, lorsque `hx-target` et `hx-swap` sont spécifiés directement dans la balise HTML, il est facile de comprendre "où et comment ce bouton va changer" lors de la relecture du code, sans avoir à fouiller dans les fichiers JavaScript. Personnellement, devoir consulter la fonction View du backend pour comprendre le code peut être un peu gênant. Cependant, avec le code `hx-` intégré dans la balise HTML comme dans cet exemple, on peut se demander si c'est mieux que le JavaScript en ligne en termes de **Localité du Comportement**.
### 2. Backend (Vue Django) {#sec-1fda4c57da3b}
Le point crucial ici est d'utiliser **`render` plutôt que `JsonResponse`**.
```python
from django.shortcuts import render
def like_post(request):
# Traitement de la logique de "J'aime" (ex: mise à jour de la base de données)
new_count = 10
# Renvoie un petit fragment de template contenant uniquement la partie du bouton, et non la page entière.
return render(request, 'partials/_like_button.html', {
'likes_count': new_count
})
```
## 3. Template partiel pour la réponse {#sec-ce5390bdc052}
C'est le 'fragment HTML' que le serveur enverra au client. Étant donné que `hx-swap="outerHTML"` est configuré, tout le `#like-section` existant sera remplacé par ce contenu.
```HTML
```
### Pourquoi cette approche ? (Comprendre le principe) {#sec-67af112c65f1}
Avec l'approche traditionnelle, après avoir reçu un `JsonResponse({'likes': 10})`, il fallait écrire du code JavaScript comme `document.getElementById('count').innerText = data.likes`.
Cependant, l'approche [[HTMX]] permet de :
1. **Éviter la fragmentation de la logique :** La définition de "comment l'écran doit changer lorsqu'un "J'aime" est cliqué" est gérée par le serveur (template Django).
2. **Synchronisation données-vue :** Puisque le HTML envoyé par le serveur est directement inséré dans l'affichage, les erreurs qui peuvent survenir lors du traitement des données côté client sont éliminées.
## Pour conclure cet épisode {#sec-b28d1b5245c5}
Utiliser [[HTMX]] ne consiste pas seulement à réduire le code, mais à revenir à la fonction intrinsèque du web : exploiter au maximum l'« Hypermedia (HTML) ». Cela permet aux développeurs de s'échapper de l'enfer de la gestion d'état JavaScript pour se concentrer davantage sur la logique côté serveur.
**Articles connexes** :
- [Simplifier le développement web dynamique avec Django et HTMX (Partie 1)](/ko/whitedec/2025/1/27/django-htmx-dynamic-web-simplification/)
- [Simplifier le développement web dynamique avec Django et HTMX (Partie 3)](/ko/whitedec/2025/1/27/django-htmx-dynamic-web-simplification-3/)
- [Simplifier le développement web dynamique avec Django et HTMX (Partie 4) : Intégration du jeton CSRF](/ko/whitedec/2025/1/27/django-htmx-csrf-token-integration/)
- [Simplifier le développement web dynamique avec Django et HTMX (Partie 5) : Fonctionnalités avancées](/ko/whitedec/2025/1/27/django-htmx-advanced-features/)
- [Simplifier le développement web dynamique avec Django et HTMX (Partie 6) : Méthode de retour HTML](/ko/whitedec/2025/1/27/django-htmx-html-response/)
- [Simplifier le développement web dynamique avec Django et HTMX (Partie 7) : Méthode de retour JSON](/ko/whitedec/2025/1/27/django-htmx-json-response/)