[점프 투 FastAPI] Dependency Injection 문의 드립니다.

안녕하세요.
온라인 책을 구매해서 보다가 문의가 생겨서 질문을 드립니다.

273페이지를 예를 들어 보면,
API 서비스를 아래 3개의 파일에 나누어 구현되어 있습니다.
질문 추천 라우터
질문 추천 CRUD
질문 추천 스키마

라우터에서 db를 Dependency Injection으로 받아와서,
CRUD 파일의 함수에 db 파라메터를 전달하는 방식으로 구현이 되어 있습니다.

CRUD 파일에 db를 전달하지 않고, Dependency Injection을 라우터와 동일하게 정의하면 아래와 같은 에러가 발생합니다.

오류난 코드

@app.post("/users2/")
async def create_user(user: UserCreate, db: Session = Depends(get_db)):
    return fn(user)

@app.post('/test')
def fn(user, db: Session = Depends(get_db)):
    db_user = User(username=user.username, email=user.email, hashed_password=user.hashed_password)
    db.add(db_user)
    db.commit()
    db.refresh(db_user)
    return db_user

잘되는 코드

아래처럼, 라우터에서 db를 전달하면 잘 됩니다.

@app.post("/users2/")
async def create_user(user: UserCreate, db: Session = Depends(get_db)):
    return fn(user, db)

@app.post('/test')
def fn(user, db):
    db_user = User(username=user.username, email=user.email, hashed_password=user.hashed_password)
    db.add(db_user)
    db.commit()
    db.refresh(db_user)
    return db_user

제가 질문드리는 점은 Dependency Injection이 왜 라우트에만 적용되는 것인가 입니다.
이유가 궁금합니다.
감사합니다.

capvirus 707

2023년 3월 28일 1:22 오후

목록으로
1개의 답변이 있습니다. 1 / 1 Page

router 함수외에 일반적인 함수에서는 특별한 경우(종속성이 연결된 경우)가 아니라면 depends 사용이 안될것 같습니다. 다음의 URL을 참고해 보세요.

https://stackoverflow.com/questions/68981634/attributeerror-depends-object-has-no-attribute-query-fastapi

박응용

2023년 3월 28일 6:40 오후