Flask-Admin으로 관리 페이지 만들기
Flask는 가볍고 확장 가능한 웹 프레임워크로, 다양한 확장을 통해 기본 기능 외에도 강력한 기능을 쉽게 추가할 수 있습니다. 그중 Flask-Admin은 어드민 인터페이스를 간단하게 구현할 수 있도록 도와주는 매우 유용한 확장입니다. 이번 포스팅에서는 Flask-Admin을 사용해 관리 페이지를 만드는 방법을 단계별로 살펴보겠습니다.
Flask-Admin 설치하기
Flask-Admin을 사용하려면 먼저 해당 확장을 설치해야 합니다. 아래 명령어를 사용해 설치할 수 있습니다:
pip install flask-admin
간단한 Flask 애플리케이션 설정
먼저 Flask 애플리케이션을 초기화하고 기본 설정을 추가합니다. 데이터베이스를 사용해 데이터를 관리하기 위해 Flask-SQLAlchemy를 함께 사용할 것입니다.
애플리케이션 초기화
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
app.config['SECRET_KEY'] = 'mysecret'
db = SQLAlchemy(app)
# Flask-Admin 초기화
admin = Admin(app, name='My Admin', template_mode='bootstrap4')
데이터 모델 생성하기
관리 페이지에서 관리할 데이터 모델을 생성합니다. 예를 들어, 사용자(User) 모델을 생성해보겠습니다.
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return f'<User {self.name}>'
Flask-Admin에 모델 등록하기
생성한 데이터 모델을 Flask-Admin에 등록하여 관리할 수 있도록 설정합니다. 이를 위해 ModelView
를 사용합니다.
# User 모델을 관리 페이지에 추가
admin.add_view(ModelView(User, db.session))
데이터베이스 초기화 및 실행
다음으로 데이터베이스를 초기화하고 Flask 애플리케이션을 실행합니다.
if __name__ == '__main__':
# 데이터베이스 생성
db.create_all()
# 애플리케이션 실행
app.run(debug=True)
Flask-Admin 인터페이스 확인하기
위 코드를 실행한 후 웹 브라우저에서 http://127.0.0.1:5000/admin
에 접속하면 Flask-Admin 관리 페이지에 접속할 수 있습니다. 기본적으로 Flask-Admin은 Bootstrap 기반의 깔끔한 UI를 제공합니다.
Flask-Admin 커스터마이징
Flask-Admin은 기본 제공되는 관리 페이지 외에도 다양한 방식으로 커스터마이징할 수 있습니다. 예를 들어, 특정 필드만 표시하거나 정렬 순서를 설정할 수 있습니다.
필드 표시 설정
class UserAdmin(ModelView):
column_list = ('id', 'name', 'email')
column_searchable_list = ('name', 'email')
column_filters = ('name',)
# 커스터마이징된 UserAdmin 추가
admin.add_view(UserAdmin(User, db.session))
인증 및 권한 추가하기
관리 페이지에 인증 및 권한을 추가하여 보안을 강화할 수도 있습니다. Flask-Login과 같은 확장을 함께 사용하면 간단히 구현할 수 있습니다.
인증 예제
from flask_login import LoginManager, UserMixin, login_user, logout_user, login_required, current_user
login_manager = LoginManager(app)
login_manager.login_view = 'login'
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(100), nullable=False)
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
# ModelView에 접근 권한 추가
class SecureModelView(ModelView):
def is_accessible(self):
return current_user.is_authenticated
admin.add_view(SecureModelView(User, db.session))
마무리
Flask-Admin은 어드민 인터페이스를 쉽고 빠르게 구축할 수 있는 강력한 도구입니다. 이번 포스팅에서는 기본적인 설정과 함께 데이터 모델 관리, 커스터마이징, 인증 추가 방법을 살펴보았습니다. Flask-Admin을 활용해 더욱 효율적이고 세련된 관리 페이지를 구현해보세요!
전체 코드
아래는 위에서 설명한 내용을 모두 포함한 최종 코드입니다:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
from flask_login import LoginManager, UserMixin, current_user
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
app.config['SECRET_KEY'] = 'mysecret'
db = SQLAlchemy(app)
login_manager = LoginManager(app)
login_manager.login_view = 'login'
class User(db.Model, UserMixin):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(50), nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
password = db.Column(db.String(100), nullable=False)
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
class SecureModelView(ModelView):
def is_accessible(self):
return current_user.is_authenticated
admin = Admin(app, name='My Admin', template_mode='bootstrap4')
admin.add_view(SecureModelView(User, db.session))
if __name__ == '__main__':
db.create_all()
app.run(debug=True)
'Python > Python Flask' 카테고리의 다른 글
Flask-Mail을 사용하여 이메일 전송하기 (0) | 2025.09.16 |
---|---|
Flask를 활용한 OAuth와 소셜 로그인 통합 방법 (0) | 2025.09.14 |
Flask에서 사용자 인증: 세션 관리 및 쿠키 사용 (0) | 2025.09.11 |
Flask 사용자 인증: Flask-Login으로 사용자 인증 구현하기 (0) | 2025.09.10 |
Flask로 RESTful API와 JSON 데이터 처리하기 (0) | 2025.09.09 |