ホームページ  >  記事  >  バックエンド開発  >  FastAPI を使用して Jinja2 でリアルタイム データ更新用の WebSocket を実装するにはどうすればよいですか?

FastAPI を使用して Jinja2 でリアルタイム データ更新用の WebSocket を実装するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-10-21 06:12:30481ブラウズ

How to Implement WebSockets for Real-Time Data Updates in Jinja2 with FastAPI?

FastAPI を使用して Jinja2 テンプレートの項目の更新リストを取得する方法

Jinja2 テンプレートでは、ループを使用して既存のデータをレンダリングできます (コメントの表示など)。ブログ投稿。ただし、新しい項目が追加された場合、Jinja2 はリストを動的に更新する方法をネイティブに提供しません。

WebSocket を使用した潜在的な解決策

Web アプリケーションでのリアルタイム更新の一般的な解決策は次のとおりです。 WebSocket を使用します。次の Python コードは、WebSocket エンドポイントを提供します。

<code class="python">from fastapi import FastAPI, WebSocket, WebSocketDisconnect
from fastapi.templating import Jinja2Templates

app = FastAPI()
templates = Jinja2Templates(directory="templates")

class ConnectionManager:
    def __init__(self):
        self.active_connections = []

    async def connect(self, websocket: WebSocket):
        await websocket.accept()
        self.active_connections.append(websocket)

    def disconnect(self, websocket: WebSocket):
        self.active_connections.remove(websocket)

    async def broadcast(self, message: str):
        for connection in self.active_connections:
            await connection.send_json(message)

manager = ConnectionManager()</code>

index.html テンプレートでは、WebSocket 接続を確立し、受信メッセージをリッスンします。

<code class="html"><script>
  var ws = new WebSocket("ws://localhost:8000/ws");
  ws.onmessage = function(event) {
    // Handle new data and update UI accordingly
  };
</script></code>

その後、WebSocket エンドポイントは次のことができます。接続されているクライアントに更新をブロードキャストします。これにより、更新されたコメント リストをリアルタイムで動的に表示できます。

注:

WebSocket はこのユースケースでは実行可能なソリューションですが、Alpine JS などの代替アプローチを検討することが重要です。より複雑な UI インタラクションには x-for ループまたは ReactJS。

以上がFastAPI を使用して Jinja2 でリアルタイム データ更新用の WebSocket を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。