Sub-dependențe Ierarhice în FastAPI în FastAPI

di FastAPI 0.110+ / Python 3.10+ Q&A / Distribuie cod

Compunerea arborelui de dependențe: o dependență poate apela alte dependențe la rândul ei, cu memorare automată a rezultatului (caching).

Sintaxă
async def get_active_user(user = Depends(get_current_user)): ...

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

Comunitate & Schimb de cunoștințe

Întrebări & Exemple de Cod: Sub-dependențe Ierarhice în FastAPI

Ai o nelămurire despre utilizarea comenzii Sub-dependențe Ierarhice în FastAPI sau 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.

Comunitate Adaugă o întrebare sau distribuie un cod

Moderare & Siguranță:

Pentru a menține calitatea și securitatea informațiilor, fiecare întrebare sau fragment de cod/prompt este analizat (manual sau prin moderare asistată de AI) înainte de publicare.