Application Factory & Config
Penjelasan
Menulis app = Flask(__name__) langsung di level modul (seperti contoh-contoh sebelumnya) bekerja baik untuk belajar, tapi bermasalah saat aplikasi butuh beberapa konfigurasi berbeda — misalnya environment development, testing, dan production dengan database berbeda-beda. Application Factory Pattern membungkus pembuatan app di dalam fungsi create_app(config_class), sehingga kamu bisa membuat instance app baru dengan konfigurasi berbeda kapan saja, termasuk saat testing (biasanya butuh instance app terpisah per test). Config biasanya ditulis sebagai class Python terpisah (DevelopmentConfig, TestingConfig, ProductionConfig) yang di-load lewat app.config.from_object().
Contoh Konsep
# config.py
class Config:
SECRET_KEY = 'default-secret'
class DevelopmentConfig(Config):
DEBUG = True
SQLALCHEMY_DATABASE_URI = 'sqlite:///dev.db'
class TestingConfig(Config):
TESTING = True
SQLALCHEMY_DATABASE_URI = 'sqlite:///:memory:'
# app.py
from flask import Flask
from config import DevelopmentConfig
def create_app(config_class=DevelopmentConfig):
app = Flask(__name__)
app.config.from_object(config_class)
from blueprints.admin import admin_bp
app.register_blueprint(admin_bp)
return app
Praktikum
Lengkapi fungsi create_app agar menerima config_class dan menerapkannya ke aplikasi.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Dengan application factory, entry point run.py cukup berisi 'from app import create_app; app = create_app()' — pemisahan ini membuat aplikasi jauh lebih mudah diuji dan di-deploy dengan konfigurasi berbeda.