[FastAPI] 종속성 > IT 기술백서

IT 기술백서

직접 알아내거나 검색하기 귀찮아서 모아 둔 것

python | [FastAPI] 종속성

본문

종속성 주입

라우트 함수 인자에 Depends 키워드를 사용하여 종속성을 해결할 수 있다.

종속성은 함수(또는 클래스)에서 하위 종속성을 중첩해서 사용할 수도 있다.


1. 함수로 종속성 사용하기

[code]

async def common_params(q: Optional[str] = None, skip:int = 0, limit: int = 100):

    return { "q": q, "skip": skip, "limit": limit }

    

@app.get("/items/")

async def read_items(commons: dict = Depends(common_params)):

    return commons

[/code]


2. 클래스로 종속성 사용하기

[code]

class CommonParams:

    def __init__(self, q: Optional[str] = None, skip:int = 0, limit:int = 100):

        self.q = q

        self.skip = skip

        self.limit = limit

        

        

@app.get("/items/")

async def read_items(commons: CommonParams = Depends(CommonParams)):

    return commons

[/code]


3. 경로 데코레이터에 의존성주입

: 일반 종속성과 다른점은 반환값이 함수에 전달되지 않는다는 점이다


[code]

from fastapi import Depends, FastAPI, Header, HTTPException


app = FastAPI()


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 invliad")

    return x_key # 전달되지 않는다


@app.get("/items/", dependencies=[Depends(verify_token), Depends(verify_key))

async def read_items():

    return [{"item": "Foo"}, {"item": "Bar"}]

[/code]


4. 전역종속성

: FastAPI 인스턴스 생성시 넣어주면 된다.

[code]

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

[/code]


5. yield 를 사용한 종속성

: 특히 Database 에서는 사용후 반드시 닫아줘야 하는 과정이 있는데 이때 사용하면 좋다.

[code]

async def get_db():

    db = DBSession()

    try:

        yield db

    finally:

        db.close() # 응답이 완료된 후 자동으로 닫아준다

[/code]


댓글 0개

등록된 댓글이 없습니다.

Menu