Sistemul de Dependency Injection din FastAPI este proiectat ca un arbore aciclic direcționat (DAG). O funcție dependență poate solicita, la rândul ei, alte dependențe prin Depends().
Un avantaj crucial: dacă trei dependențe diferite depind toate de get_db în cadrul aceleiași cereri HTTP, FastAPI va executa get_db o singură dată și va reutiliza același rezultat memorat în cache pe durata cererii curente.
Exemplu: Lanț de dependențe de la token la utilizator activ
from fastapi import FastAPI, Depends, HTTPException, Header
from typing import Annotated
app = FastAPI()
# Dependența 1: Extrage și validează tokenul
async def get_token_header(x_token: Annotated[str, Header()]):
if not x_token:
raise HTTPException(status_code=400, detail="Antetul X-Token lipsește")
return x_token
# Dependența 2: Depinde de tokenul validat și extrage utilizatorul
async def get_current_user(token: Annotated[str, Depends(get_token_header)]):
return {"username": "ion_popescu", "active": True}
# Dependența 3: Verifică dacă utilizatorul extras este activ
async def get_active_user(user: Annotated[dict, Depends(get_current_user)]):
if not user.get("active"):
raise HTTPException(status_code=400, detail="Contul este dezactivat")
return user
@app.get("/me")
async def read_current_user(user: Annotated[dict, Depends(get_active_user)]):
return user
Întrebări & Exemple de Cod:
Sub-dependențe Ierarhice în FastAPIAi o nelămurire despre utilizarea comenzii
Sub-dependențe Ierarhice în FastAPIsau ai descoperit un truc / fragment de cod util? Distribuie-l cu ceilalți programatori!Fii primul care pune o întrebare sau distribuie un fragment de cod / prompt!
Nu au fost adăugate încă întrebări sau exemple de cod pentru această pagină. Dacă ai întâlnit o problemă sau ai un snippet util, adaugă-l mai jos pentru a-i ajuta pe ceilalți.