Lors de la création d'un client de notification nécessitant une connexion initiale , il est important de trouver un moyen efficace de l'utiliser sur tous les points de terminaison pour éviter les retards de performances. Nous présentons deux approches potentielles pour résoudre ce scénario.
À l'aide de l'attribut app.state, on peut stocker des objets de classe personnalisés. en dehors du fichier principal. Cela permet d'accéder au client de notification via l'objet Request, même lorsque vous travaillez avec un sous-module qui utilise APIRouter. Il est possible d'initialiser l'objet à l'aide d'un événement de démarrage désormais obsolète ou d'une fonction de durée de vie.
from fastapi import FastAPI, Request from contextlib import asynccontextmanager @asynccontextmanager async def lifespan(app: FastAPI): app.state.n_client = NotificationClient() yield app.state.n_client.close() app = FastAPI(lifespan=lifespan) @app.get('/') async def main(request: Request): n_client = request.app.state.n_client # ...
Avec l'introduction du gestionnaire de durée de vie de Starlette, l'initialisation et l'utilisation des objets peuvent être gérées dans request.state. Ce gestionnaire fournit également des fonctionnalités de démarrage et d’arrêt. En ajoutant l'objet initialisé au dictionnaire d'état, il devient accessible au sein des points de terminaison à l'aide de request.state.
from fastapi import FastAPI, Request from contextlib import asynccontextmanager @asynccontextmanager async def lifespan(app: FastAPI): n_client = NotificationClient() yield {'n_client': n_client} n_client.close() app = FastAPI(lifespan=lifespan) @app.get('/') async def main(request: Request): n_client = request.state.n_client # ...
Les deux approches offrent des solutions pour réutiliser un objet ou une variable globale dans les points de terminaison FastAPI. L'option qui convient le mieux à une application particulière dépendra des exigences et de l'architecture spécifiques.
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!