Flask
Chapter 3-4 Flask-SQLAlchemy 사용자 관리 라우트 구축(routes/user.py)
Chansman
2025. 4. 21. 10:22
📌 개념 정리
3-4. 사용자 관리 라우트 구축
💻 전체 코드 예시 (routes/user.py)
from flask.views import MethodView
from flask_smorest import Blueprint, abort
from marshmallow import Schema, fields
from db import db
from models import User
# 스키마 정의
class UserSchema(Schema):
id = fields.Int(dump_only=True)
name = fields.Str(required=True)
email = fields.Str(required=True)
# Blueprint 설정
user_blp = Blueprint('users', 'users', url_prefix='/users', description='Operations on users')
@user_blp.route('/')
class UserList(MethodView):
@user_blp.response(200, UserSchema(many=True))
def get(self):
users = User.query.all()
return users
@user_blp.arguments(UserSchema)
@user_blp.response(201, UserSchema)
def post(self, new_data):
new_user = User(name=new_data['name'], email=new_data['email'])
db.session.add(new_user)
db.session.commit()
return new_user
@user_blp.route('/<int:user_id>')
class UserResource(MethodView):
@user_blp.response(200, UserSchema)
def get(self, user_id):
user = User.query.get_or_404(user_id)
return user
@user_blp.arguments(UserSchema)
@user_blp.response(200, UserSchema)
def put(self, new_data, user_id):
user = User.query.get_or_404(user_id)
user.name = new_data['name']
user.email = new_data['email']
db.session.commit()
return user
@user_blp.response(204)
def delete(self, user_id):
user = User.query.get_or_404(user_id)
db.session.delete(user)
db.session.commit()
🚦 단계별 프로세스 흐름 및 설명
📍 Step 1: Schema 정의
class UserSchema(Schema):
id = fields.Int(dump_only=True)
name = fields.Str(required=True)
email = fields.Str(required=True)
- 사용자 데이터를 검증하고 직렬화/역직렬화할 Schema를 정의합니다.
- id는 자동 생성되는 필드로 사용자가 직접 입력하지 않습니다.
- name, email 필드는 필수 입력 필드로 설정됩니다.
📍 Step 2: Blueprint 설정
user_blp = Blueprint('users', 'users', url_prefix='/users', description='Operations on users')
- Flask-Smorest의 Blueprint를 사용하여 사용자 관련 API를 그룹화합니다.
- URL 접두사를 /users로 설정합니다.
📍 Step 3: 전체 사용자 목록 조회 및 추가
GET 요청 (사용자 목록 조회)
@user_blp.route('/')
class UserList(MethodView):
@user_blp.response(200, UserSchema(many=True))
def get(self):
users = User.query.all()
return users
- 모든 사용자를 데이터베이스에서 조회하여 리스트 형태로 반환합니다.
- Schema를 이용하여 데이터 구조를 정의합니다.
POST 요청 (새 사용자 추가)
@user_blp.arguments(UserSchema)
@user_blp.response(201, UserSchema)
def post(self, new_data):
new_user = User(name=new_data['name'], email=new_data['email'])
db.session.add(new_user)
db.session.commit()
return new_user
- 새 사용자 데이터를 받아 데이터베이스에 저장합니다.
- 저장된 사용자 정보를 다시 반환하여 확인할 수 있도록 합니다.
📍 Step 4: 특정 사용자 조회, 수정, 삭제
GET 요청 (특정 사용자 조회)
@user_blp.route('/<int:user_id>')
class UserResource(MethodView):
@user_blp.response(200, UserSchema)
def get(self, user_id):
user = User.query.get_or_404(user_id)
return user
- 특정 사용자 ID를 통해 사용자 정보를 조회합니다.
PUT 요청 (사용자 정보 수정)
@user_blp.arguments(UserSchema)
@user_blp.response(200, UserSchema)
def put(self, new_data, user_id):
user = User.query.get_or_404(user_id)
user.name = new_data['name']
user.email = new_data['email']
db.session.commit()
return user
- 특정 사용자의 데이터를 수정하고 변경 사항을 저장합니다.
DELETE 요청 (사용자 삭제)
@user_blp.response(204)
def delete(self, user_id):
user = User.query.get_or_404(user_id)
db.session.delete(user)
db.session.commit()
- 특정 사용자를 데이터베이스에서 삭제합니다.
✅ 마무리 요약 및 복습 포인트
- Schema로 데이터의 구조를 관리하고 유효성을 검증합니다.
- Blueprint로 사용자 관련 API를 효율적으로 관리합니다.
- CRUD 기능을 명확히 정의하여 데이터 처리를 간결하게 합니다.