Comment mettre à jour la liste des commentaires dans les modèles Jinja2 à l'aide de WebSockets avec FastAPI ?

Linda Hamilton
Libérer: 2024-10-21 06:15:30
original
769 Les gens l'ont consulté

How to Update Comment List in Jinja2 Templates Using WebSockets with FastAPI?

Comment obtenir la liste mise à jour des éléments dans le modèle Jinja2 à l'aide de FastAPI ?

Problème :

Envisagez un scénario dans lequel vous construisez un système de commentaires sur un blog. Vous restituez les commentaires existants à l'aide des modèles Jinja2. Lorsqu'un nouveau commentaire est publié via une route FastAPI, vous devez mettre à jour la liste des commentaires affichés dans le modèle.

Solution :

Bien que Jinja2 ne soit pas idéal pour gérant les mises à jour en temps réel, une solution peut être trouvée en utilisant WebSockets. Cela nécessite de modifier à la fois le backend FastAPI et le modèle Jinja2 :

FastAPI Backend (app.py) :

  • Créez une classe ConnectionManager pour gérer les connexions WebSocket.
  • Définissez une méthode send_personal_message pour envoyer des messages à des clients spécifiques.
  • Définissez une méthode de diffusion pour envoyer des messages à tous les clients connectés.
  • Mettez à jour la route / pour gérer les connexions et transmettez la liste des commentaires au modèle. .
  • Créez un point de terminaison WebSocket (/ws) pour gérer les connexions WebSocket entrantes et diffuser de nouveaux commentaires.

Modèle Jinja2 (index.html) :

  • Ajouter un
      élément pour afficher les commentaires.
    • Créez une fonction JavaScript addComment pour envoyer de nouveaux commentaires via WebSocket.
    • Dans le gestionnaire d'événements onmessage pour WebSocket, créez des éléments HTML pour afficher le nouveau commentaire et ajoutez-le au
        élément.

      Exemple de code :

      <code class="html"><!-- app.py -->
      @app.websocket("/ws")
      async def websocket_endpoint(websocket: WebSocket):
          await manager.connect(websocket)
          try:
              while True:
                  data = await websocket.receive_json()
                  comments.append(Comment(data['author'], data['content']))
                  await manager.broadcast(data)
          except (WebSocketDisconnect, ConnectionClosed):
              manager.disconnect(websocket)</code>
      Copier après la connexion
      <code class="html"><!-- index.html -->
      <script>
          var ws = new WebSocket("ws://localhost:8000/ws");
          ws.onmessage = function(event) {
              var comments = document.getElementById('comments')
              var comment = document.createElement('li')
              var jsonObj  = JSON.parse(event.data);
              var authorNode = document.createElement('h3');
              authorNode.innerHTML = jsonObj.author;
              var contentNode = document.createElement('p');
              contentNode.innerHTML = jsonObj.content;
              comment.appendChild(authorNode);
              comment.appendChild(contentNode);
              comments.appendChild(comment)
          };
          function addComment(event) {
              var author = document.getElementById("author")
              var content = document.getElementById("content")
              ws.send(JSON.stringify({
                  "author": author.value,
                  "content": content.value
              }))
              author.value = ''
              content.value = ''
              event.preventDefault()
          }
      </script></code>
      Copier après la connexion

      En utilisant WebSockets, vous pouvez établir une connexion en temps réel entre le backend FastAPI et le Modèle Jinja2, permettant d'afficher la liste mise à jour des commentaires dans l'interface utilisateur.

      Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!