FastAPI Depends

Haks.·2025년 2월 13일
0

Study

목록 보기
57/65

FastAPI에서는 Dependecny Injection 을 통해 연결

  • Dependency Injection 개념
    • 특정 동작에 필요한 의존성을 함수나 클래스 외부에서 주입하는 패턴
    • FastAPI에서는 Depends를 사용하여 필요한 의존성을 정의하고 관리할 수 있음
    • 주로 데이터베이스 세션, 인증, 설정 등의 관리에서 사용됨
    • 특정 함수를 엔드포인트에 자동으로 주입
  • 연결 가능 목록

    • 데이터베이스 세션(DB connection)
    @app.get("/items/")
    async def read_items(db: AsyncSession = Depends(get_db)):  # ✅ DB 세션 자동 주입
      result = await db.execute("SELECT * FROM items")
      items = result.fetchall()
      return items
    • JWT토큰을 통한 사용자 인증
    SECRET_KEY = "secret-key"
    ALGORITHM = "HS256"
    
    oauth2_scheme = OAuth2PasswordBearer(tokenUrl="login")
    
    async def get_current_user(token: str = Depends(oauth2_scheme)):  # ✅ 토큰 자동 주입
        try:
            payload = jwt.decode(token, SECRET_KEY, algorithms=[ALGORITHM])
            username = payload.get("sub")
            if not username:
                raise HTTPException(status_code=401, detail="Invalid token")
        except Exception:
            raise HTTPException(status_code=401, detail="Invalid token")
    
        return {"username": username}
    
    @app.get("/profile/")
    async def read_profile(current_user: dict = Depends(get_current_user)):  # ✅ 현재 사용자 정보 자동 주입
    
        return {"message": f"Hello, {current_user['username']}!"}
    • 환경 변수, 설정 값
    
    class AppSettings:
      def __init__(self):
          self.debug = True
          self.api_key = "my-secret-api-key"
    
    async def get_settings():
      return AppSettings()
    
    @app.get("/settings/")
    async def read_settings(settings: AppSettings = Depends(get_settings)):  # ✅ 설정 값 자동 주입
        return {"debug": settings.debug, "api_key": settings.api_key}
    • 공통적으로 실행할 미들웨어 기능(예: 로깅, 보안 검사)
    from fastapi import Request, Depends
    
    async def log_request(request: Request):
        print(f"📌 요청 수신: {request.method} {request.url}")
        return request
    
    @app.get("/secure-data/")
    async def secure_data(request: Request = Depends(log_request)):  # ✅ 요청 로깅 자동 적용
        return {"message": "This is secure data!"}
    • OAuth2 인증 시스템(OAuth2PasswordBearer)
    from fastapi.security import OAuth2PasswordBearer
    
    oauth2_scheme = OAuth2PasswordBearer(tokenUrl="token")
    
    @app.get("/users/me/")
    async def read_users_me(token: str = Depends(oauth2_scheme)):  # ✅ 토큰 자동 주입
        return {"token": token}

0개의 댓글

관련 채용 정보