콘텐츠로 이동

전역 의존성

몇몇 유형의 애플리케이션에서는 애플리케이션 전체에 의존성을 추가하고 싶을 수 있습니다.

경로 처리 데코레이터dependencies 추가하기와 유사한 방법으로 FastAPI 애플리케케이션에 그것들을 추가할 수 있습니다.

그런 경우에, 애플리케이션의 모든 경로 처리에 적용될 것입니다:

from typing import Annotated

from fastapi import Depends, FastAPI, Header, HTTPException


async def verify_token(x_token: Annotated[str, Header()]):
    if x_token != "fake-super-secret-token":
        raise HTTPException(status_code=400, detail="X-Token header invalid")


async def verify_key(x_key: Annotated[str, Header()]):
    if x_key != "fake-super-secret-key":
        raise HTTPException(status_code=400, detail="X-Key header invalid")
    return x_key


app = FastAPI(dependencies=[Depends(verify_token), Depends(verify_key)])


@app.get("/items/")
async def read_items():
    return [{"item": "Portal Gun"}, {"item": "Plumbus"}]


@app.get("/users/")
async def read_users():
    return [{"username": "Rick"}, {"username": "Morty"}]
🤓 Other versions and variants

Tip

Prefer to use the Annotated version if possible.

from fastapi import Depends, FastAPI, Header, HTTPException


async def verify_token(x_token: str = Header()):
    if x_token != "fake-super-secret-token":
        raise HTTPException(status_code=400, detail="X-Token header invalid")


async def verify_key(x_key: str = Header()):
    if x_key != "fake-super-secret-key":
        raise HTTPException(status_code=400, detail="X-Key header invalid")
    return x_key


app = FastAPI(dependencies=[Depends(verify_token), Depends(verify_key)])


@app.get("/items/")
async def read_items():
    return [{"item": "Portal Gun"}, {"item": "Plumbus"}]


@app.get("/users/")
async def read_users():
    return [{"username": "Rick"}, {"username": "Morty"}]

그리고 경로 처리 데코레이터dependencies 추가하기 섹션의 모든 아이디어는 여전히 적용되지만, 이 경우에는 앱의 모든 경로 처리에 적용됩니다.

경로 처리 그룹에 대한 의존성

나중에 여러 파일을 포함할 수도 있는 더 큰 애플리케이션을 구조화하는 법(더 큰 애플리케이션 - 여러 파일들)을 읽을 때, 경로 처리 그룹에 대한 단일 dependencies 매개변수를 선언하는 법을 배우게 될 것입니다.