Une fois que votre application commence à grandir, interagir avec la base de données via le terminal (ou des scripts) devient vite rébarbatif. Heureusement, Flask-Admin vole à notre secours.
Flask-Admin est une extension extrêmement puissante qui génère automatiquement des interfaces d'administration complètes (CRUD) pour vos modèles de base de données.
Pourquoi utiliser Flask-Admin ?
- Gain de temps massif : Pas besoin de coder un back-office à partir de zéro.
- Intégration transparente : Gère SQLAlchemy, Peewee, MongoEngine...
- Extensible : Vous pouvez personnaliser les vues, ajouter des formulaires sur mesure, ou même définir vos propres templates.
- Sécurisé : S'intègre très facilement avec Flask-Login (ou d'autres solutions d'auth) pour restreindre l'accès au panel.
Installation et configuration de base
pip install flask-admin
Dans votre app.py (ou dans votre factory function) :
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['SECRET_KEY'] = 'ma-cle-secrete'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
# Modèle d'exemple
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
# Initialisation de Flask-Admin
admin = Admin(app, name='Mon Backend')
# Ajout d'une vue pour le modèle User
admin.add_view(ModelView(User, db.session))
if __name__ == '__main__':
with app.app_context():
db.create_all()
app.run(debug=True)
En visitant http://localhost:5000/admin, vous aurez instantanément une interface pour créer, lire, modifier et supprimer des utilisateurs !
Sécuriser l'interface
Il ne faut jamais laisser l'accès d'administration public. En créant une vue personnalisée qui hérite de ModelView, vous pouvez vérifier si l'utilisateur courant est autorisé :
from flask_login import current_user
from werkzeug.exceptions import Forbidden
class SecureModelView(ModelView):
def is_accessible(self):
# Vérifiez ici que l'utilisateur est admin
return current_user.is_authenticated and current_user.is_admin
def inaccessible_callback(self, name, **kwargs):
# Rediriger vers la page de connexion ou renvoyer une erreur 403
raise Forbidden()
# Utilisation
admin.add_view(SecureModelView(User, db.session))
Avec Flask-Admin, vous disposez d'un back-office complet en quelques lignes de code !