Inflearn brand logo image

인프런 커뮤니티 질문&답변

moljin님의 프로필 이미지
moljin

작성한 질문수

FastAPI: Python으로 3배 빠르게, 2배 정확한, 10배 빠른 API 만들기

31강 질문: /docs에 read_all_users 관련

해결된 질문

작성

·

52

·

수정됨

1

31강에서 구현된 users.py의 read_all_users는 화면에 구현이 안되는 것이 맞는 것인가요? Users의 POST /users 밑에 GET /users/all로 있어야 할 것 같은데...

===> PC를 재시작 후 다시 서버를 실행해 보니 나타납니다.

image.png

DB Browser에서 특정 User의 is_admin을 true로 수정하고 저장까지 완료하고 난 후, 각각의 User들로 로그인해보았습니다. 그런데, is_admin이 false인 모든 User들도 read_all_users의 endpoint인 /users/all에서 모든 회원들의 리스트가 조회가 됩니다.

image.png

/docs 페이지라서 그런 것인지 아니면 잘못 구현된 것인지 궁금합니다. 강의에서는 docs에서의 이런 상황에 대한 언급이 없어 질문을 드립니다.

답변 3

1

moljin님의 프로필 이미지
moljin
질문자

이 질문에 대한 최종답변을 기다리고 있습니다. 일반 회원들도 모든 user들의 리스트를 볼 수 있습니다. is_admin이 true인 관리자만 read_all_users가 실행되어야 맞을 것 같은데 말입니다. 답변 부탁드립니다.

해여님의 프로필 이미지
해여
지식공유자

안녕하세요, 강사 해여입니다.

먼저 문제 원인 분석을 위해 다음의 과정을 진행해보시겠어요?

1. /docs 페이지로 이동합니다.
2. 오른쪽 상단의 Authorize 버튼을 클릭합니다.
3. 만약 이미 로그인이 되어 있다면, Logout 버튼을 눌러 로그아웃합니다.
4. (가장 중요!) 팝업 창을 닫고, 웹 브라우저 페이지를 강력 새로고침(Hard Refresh) 합니다.
Mac: Cmd + Shift + R
Windows/Linux: Ctrl + Shift + R * 이렇게 하면 브라우저에 남아있을 수 있는 모든 캐시와 인증 상태가 완전히 초기화됩니다.
5. 다시 Authorize 버튼을 누르고, is_admin=false인 일반 사용자의 정보로 로그인합니다. 6. 이제 /users/all 엔드포인트를 실행(Execute)해 보세요.

moljin님의 프로필 이미지
moljin
질문자

말씀하신데로 강력 새로고침 시행하고 is_admin=false인 일반 사용자의 정보로 로그인 했지만 여전히 모든 users가 보입니다. 원인을 찾을 수가 없네요..

희한합니다. 분명히 DB Browser상에는 is_admin=false인 일반 사용자로 로그인을 했는데, async def require_admin을 타고 들어간 곳에 print함수를 이용해서 current_user.is_admin을 찍어 봣더니 True인 겁니다. 희한 합니다. 마법이 일어나버렸습니다.

강력 새로고침 뿐만아니라, PC를 재시작하고 난 후에도 동일하게 나옵니다. 희한합니다. 참으로....

moljin님의 프로필 이미지
moljin
질문자

하... 찾았습니다. 원인을...DB Browser에서 true를 1로, false를 0으로 바꾸고 저장하고 테스트를 해봣더니... 제대로 됩니다. 허허허, 아마도 false를 문자열로 인식해서 이쓰니 True로 출력이 되었나 봅니다.

 

그리고, sql_models/user.py의 class User(Base):에서 is_admin부분의 default=False를 default=0으로 수정했습니다. user생성때부터 0으로 되게....

is_admin: Mapped[bool] = mapped_column(Boolean, default=0, server_default='false', nullable=False)

0

해여님의 프로필 이미지
해여
지식공유자

🙂

0

안녕하세요, 인프런 AI 인턴입니다. moljin님.

read_all_users 함수가 Swagger UI (/docs) 화면에 표기되지 않는 문제에 대해 질문해주셨군요. 일반적으로 FastAPI에서 엔드포인트가 /docs에 나타나지 않는 경우는 몇 가지 이유가 있을 수 있습니다.

  1. @app.get 데코레이터 확인: read_all_users 함수에 데코레이터가 제대로 설정되어 있는지 확인해주세요. 예를 들어, @app.get("/users/all")와 같이 설정해야 해당 엔드포인트가 자동으로 문서화됩니다.

  2. 라우팅 문제: users.py 파일에서 FastAPI 인스턴스에 포함되어 있는지, 그리고 해당 파일이 FastAPI 애플리케이션의 라우팅 설정에 제대로 연결되었는지도 확인이 필요합니다. include_router를 통해 모듈이 적절히 등록되어 있어야 합니다.

  3. 오류 로그 확인: 코드 실행 중 오류가 발생해 엔드포인트 등록이 완료되지 않았을 가능성도 있습니다. 콘솔 오류 로그를 확인해 보세요.

관련 문제를 논의한 게시물이 아래에 있으므로, 이와 관련된 더 많은 정보나 솔루션을 참고하실 수 있습니다:
- FastAPI 엔드포인트가 /docs에 나타나지 않는 문제

위 링크를 통해 다른 수강생들의 경험담이나 해결 방법을 참조하실 수 있습니다. 특히 Swagger UI에 대한 설정 및 엔드포인트 선언에 관한 기본 개념을 반복적으로 점검하는 것이 큰 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

moljin님의 프로필 이미지
moljin

작성한 질문수

질문하기