FastAPI, CRUD API 예제
글. 수알치 오상문
[예제] main.py
from fastapi import FastAPI, status # Response
from fastapi.exceptions import HTTPException
from pydantic import BaseModel
from typing import List, Literal
app = FastAPI()
users = [
{
'low_id': 1,
'user_id': 'user1',
'name': 'Sualchi',
'age': 30,
'gender': 0,
'mobile': '01011112222'
},
{
'low_id': 2,
'user_id': 'user2',
'name': 'Maria',
'age': 31,
'gender': 1,
'mobile': '01011113333'
},
]
class IdGenerator:
def __init__(self, last_id_number):
self.user_last_id = last_id_number
def get_new_id(self):
self.user_last_id += 1
return self.user_last_id
id_gen = IdGenerator(len(users)) # 기존 id 번호 최종 값으로 초기화
id_make = id_gen.get_new_id
class User(BaseModel):
low_id : int
user_id : str
name : str
age : int
gender : Literal[0, 1, 2] # 남자 0, 여자 1, 모름 2
mobile : str
class CreateUser(BaseModel):
user_id : str
name : str
age : int
gender : Literal[0, 1, 2] # 남자 0, 여자 1, 모름 2
mobile : str
class UpdateUser(BaseModel):
name : str
age : int
gender : Literal[0, 1, 2] # 남자 0, 여자 1, 모름 2
mobile : str
@app.get("/users", response_model=List[User]) # status_code 사용 시 오류 발생
async def get_all_users():
""" 모든 사용자 정보 리스트를 돌려준다. """
return users
@app.get("/user/{low_id}")
async def get_user(low_id: int) -> dict:
""" 특정 사용자 정보를 돌려준다. """
for user in users:
if user['low_id'] == low_id:
return user
# raise HTTPException(status_code=status.HTTP_404_NOT_FOUND, detail="User not found")
raise HTTPException(status_code=404, detail="User not found")
@app.get("/user/{low_id}")
async def get_user(low_id: int) -> dict:
""" 특정 사용자 정보를 돌려준다. """
for user in users:
if user['low_id'] == low_id:
return user
raise HTTPException(status_code=404, detail="User not found")
@app.post("/user", status_code=status.HTTP_201_CREATED)
async def create_user(new_data: CreateUser) -> dict:
""" 사용자를 새로 등록한다. """
new_user = new_data.model_dump()
new_user['low_id'] = id_make() # 신규 id
users.append(new_user)
return new_user
@app.patch("/user/{low_id}")
async def update_user(low_id: int, update_data: UpdateUser) -> dict:
" 특정 사용자 정보를 갱신한다."
update_user = update_data.model_dump(exclude_unset=True) # 값이 설정되지 않은 필드 제외
print(update_user)
for user in users:
if user["low_id"] == low_id:
user.update(update_user) # 딕셔너리 업데이트
return user
raise HTTPException(status_code=404, detail="User not found")
@app.delete("/user/{low_id}", status_code=status.HTTP_200_OK)
async def delete_user(low_id: int):
""" 특정 사용자를 제거한다 """
for user in users:
if user["low_id"] == low_id:
users.remove(user)
return {"status": "OK", "message": "User is deleted"}
raise HTTPException(status_code=404, detail="User not found")
[실행]
uvicorn main:app --reload --port 80
[화면] http://127.0.0.1:80
반응형
'FastAPI' 카테고리의 다른 글
SQLAlchemy, 객체 값 업데이트 setattr () (0) | 2024.12.19 |
---|---|
FastAPI, Jinja 기본 예제 (2) | 2024.12.18 |
FastAPI, 동영상 강좌 FastAPI Beyond CRUD (1) | 2024.12.15 |
FastAPI, Role-Based Access Control (사용자 역할 기반 접근 제어) (1) | 2024.12.15 |
파이썬, FastAPI, .env 환경변수 설정 정보 가져오기 (0) | 2024.12.12 |