Flask Backend Startup
📏 ディレクトリ構成
- models, routes, services, schemas の4構成
- models: データベース・データ関連(入れ物)
- routes: エンドポイント・アクセス先(入口、出口)
- services: 処理(処理)
- schemas: ルール・チェック(確認)
.
├── app/
│ ├── __init__.py
│ ├── config.py
│ ├── models/
│ │ ├── __init__.py
│ ├── services/
│ │ ├── __init__.py
│ ├── routes/
│ │ ├── __init__.py
│ ├── schemas/
│ │ ├── __init__.py
├── migrations/
│ └── (Alembicマイグレーションファイル flask db init後に自動生成)
├── requirements.txt
├── Dockerfile
├── docker-compose.yml
├── .env
└── run.py
📝 requirements.txt
Flask
Flask-SQLAlchemy
Flask-Migrate
psycopg2-binary
📁 .env
FLASK_APP=run.py
FLASK_ENV=development
DATABASE_URL=postgresql://postgres:password@db:5432/postgr
🐳 Dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "run.py"]
🐳 docker-compose.yml
- web: flaskコンテナ
- db: PostgreSQLコンテナ
version: '3'
services:
db:
image: postgres:14
container_name: backend_db
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
ports:
- "5432:5432"
volumes:
- db_data:/var/lib/postgresql/data
web:
build: .
container_name: backend_web
ports:
- "8000:5000"
depends_on:
- db
volumes:
- .:/app
env_file:
- .env
volumes:
db_data:
⚙️ app/config.py
import os
class Config:
SQLALCHEMY_DATABASE_URI = os.getenv('DATABASE_URL')
SQLALCHEMY_TRACK_MODIFICATIONS = False
🌐 app/routes/init.py
# ⬇️⬇️⬇️ routes ファイルをここへインポート
# from app.models.**** import ****_bp
def register_bp(app):
# ⬇️⬇️⬇️ ここでBlueprintを登録
# app.register_blueprint(****_bp)
pass
🔵 app/models/init.py
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate
from app.config import Config
db = SQLAlchemy()
def setup_db(app):
app.config.from_object(Config)
db.init_app(app)
migrate = Migrate()
migrate.init_app(app, db)
🔴 app/init.py
- アプリケーション起動
- DBのセットアップ
- ルーティングの登録
from flask import Flask
from app.models import setup_db
from app.routes import register_bp
def create_app():
app = Flask(__name__)
setup_db(app)
register_bp(app)
return app
🏃 run.py
from app import create_app
if __name__ == "__main__":
app = create_app()
app.run(host="0.0.0.0", debug=True)
Alembic(Migration)
# 初回にターミナル上で実行
flask db init
# モデルを作成したらコミット実行
flask db migrate -m "Create xxx table"
# DBに適用実行
flask db upgrade