FastAPI Routing 실습 - 69

2023. 1. 18. 00:57·Develop/FastAPI
728x90
SMALL
실습 문제
1. routers 디렉터리에 users.py 생성
2. users.py 특정 사용자 호출(path parameter) API: GET
3. users.py 특정 사용자 호출(query parameter) API: GET
4. users.py JWT를 생성해서 해당 사용자 암호 업데이트 API: PUT
5. users.py JWT를 생성해서 해당 사용자 삭제 API: DELETE

실습 풀이

프로젝트 구조

TodoApp
main.py

database.py

models.py
TodoApp/routers TodoApp/company
auth.py users.py todos.py companyapis.py dependencies.py

 

1. 라이브러리 및 DB 연결 그리고 에러 함수 생성

from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel
from sqlalchemy.orm import Session
from TodoApp.database import SessionLocal
import models
from .auth import get_password_hash, get_current_user, get_user_exception, verify_password


router = APIRouter(
    prefix="/users",
    tags=["users"],
    responses={404: {"description": "Not found"}}
)


def get_db():
    try:
        db = SessionLocal()
        yield db
    finally:
        db.close()
        
def http_exception(description):
    return HTTPException(status_code=404, detail=description)

def successful_response(description):
    return {
        'status': 200,
        'transaction': description
    }

 

2. GET 요청 API 생성

#전체 사용자 불러오기
@router.get("/")
async def read_all_users(db: Session = Depends(get_db)):
    user_model = db.query(models.Users).all()
    if not user_model:
        http_exception("Invalid user_id")
    return user_model

#특정 사용자 path로 불러오기
@router.get("/{user_id}")
async def user_by_path(user_id: int, db: Session = Depends(get_db)):
    user_model = db.query(models.Users).filter(models.Users.id == user_id).first()
    if user_model is not None:
        return user_model
    return http_exception("Invalid user_id")

#특정 사용자 query로 불러오기
@router.get("/user/")
async def user_by_query(user_id: int, db: Session = Depends(get_db)):
    user_model = db.query(models.Users).filter(models.Users.id == user_id).first()
    if user_model is not None:
        return user_model
    return http_exception("Invalid user_id")

 

3. PUT 요청 API 생성

#유효성 검사
class UserVerification(BaseModel):
    username: str
    password: str
    new_password: str
    
@router.put("/user/password")
async def user_password_change(user_verification: UserVerification, user: dict = Depends(get_current_user),
                               db: Session = Depends(get_db)):
    if user is None:
        raise get_user_exception()

    user_model = db.query(models.Users).filter(models.Users.id == user.get('id')).first()

    if user is not None:
        if user_verification.username == user_model.username and verify_password(user_verification.password,
                                                                                 user_model.hashed_password):
            user_model.hashed_password = get_password_hash(user_verification.new_password)
            db.add(user_model)
            db.commit()
            return successful_response('Update Successful')

 

4. DELETE 요청 API 생성

@router.delete("/user")
async def delete_user(user: dict = Depends(get_current_user), db: Session = Depends(get_db)):

    if user is None:
        raise get_user_exception()

    user_model = db.query(models.Users).filter(models.Users.id == user.get("id")).first()

    if user_model is None:
        return http_exception("Invalid user or request")

    db.query(models.Users).filter(models.Users.id == user.get("id")).delete()
    db.commit()

    return successful_response('Delete Successful')
728x90
SMALL
저작자표시 비영리 변경금지 (새창열림)

'Develop > FastAPI' 카테고리의 다른 글

FastAPI Alembic new 테이블 및 외래키 생성(Upgrade / Downgrade) - 71  (0) 2023.01.22
FastAPI What is Alembic(upgrade/ downgrade 실습) - 70  (2) 2023.01.22
FastAPI Dependencies 라우팅 - 68  (0) 2023.01.17
FastAPI External 라우팅 - 67  (0) 2023.01.17
FastAPI Prefix 라우팅 - 66  (0) 2023.01.17
'Develop/FastAPI' 카테고리의 다른 글
  • FastAPI Alembic new 테이블 및 외래키 생성(Upgrade / Downgrade) - 71
  • FastAPI What is Alembic(upgrade/ downgrade 실습) - 70
  • FastAPI Dependencies 라우팅 - 68
  • FastAPI External 라우팅 - 67
동석해요
동석해요
공부하고 싶은게 많은, 사소한 IT 지식들 공유
    250x250
  • 동석해요
    개발로 자기계발
    동석해요
  • 전체
    오늘
    어제
    • 분류 전체보기 (226)
      • Develop (126)
        • 기초지식 (12)
        • FastAPI (102)
        • Django (11)
      • Database & Data (62)
        • 기초지식 (16)
        • MySQL (29)
        • PostgreSQL (8)
        • 데이터 분석 (9)
      • 인공지능 (11)
        • PyTorch (9)
      • Cloud (8)
        • AWS (4)
        • GCP (2)
      • 버그처리 (14)
      • 회고 & 일상 (5)
  • 인기 글

  • 최근 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
동석해요
FastAPI Routing 실습 - 69
상단으로

티스토리툴바