Skip to main content Aller au contenu principal

Interface d'Administration (Flask-Admin)

Apprendre Flask : Le Guide Ultime
4 min de lecture
Gratuit

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 !