Outils pour utilisateurs

Outils du site


dev:python:flask:architecture_projet_flask

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
dev:python:flask:architecture_projet_flask [2025/08/07 07:38] – supprimée - modification externe (Date inconnue) 127.0.0.1dev:python:flask:architecture_projet_flask [2026/04/05 08:09] (Version actuelle) yoann
Ligne 1: Ligne 1:
 +{{tag>dev python flask web api}}
 +
 +
 +
 +====== Flask ======
 +
 +:TODO_DOCUPDATE:
 +
 +Flask n'impose aucune arborescence, selon les besoins on peut opter pour une application monolithique ou modulaire.
 +
 +===== Application monolithique =====
 +
 +Pour les petit projets, les tests ou les tutoriaux, on utilise généralement un simple module Python qui se charge d' instancier directement l'objet Flask. Cette approche monolithique permet de coder rapidement une preuve de concept (PoC), un prototype par exemple.
 +
 +
 +
 +===== Application modulaire =====
 +
 +Lorsque les projets grossissent ou pour pouvoir travailler en équipe, le découpage en packages et modules Python et l'utilisation de standards et de recommandations s'imposent. Un version monolithique deviendrait difficilement maintenable.
 +
 +Le framework Flask propose le système de [[dev:python:flask:blueprints|Blueprint]] pour structurer le code en unités fonctionnelles selon ses besoins.
 +
 +<code>
 +/home/user/Projects/aAppProject
 +├── myapp/                         # le paquetage de l'application flask
 +│   ├── __init__.py
 +│   ├── db.py
 +│   ├── schema.sql
 +│   ├── auth.py
 +│   ├── blog.py
 +│   ├── templates/                 # les modèles de type jinja2 
 +│   │   ├── base.html
 +│   │   ├── auth/
 +│   │   │   ├── login.html
 +│   │   │   └── register.html
 +│   │   └── blog/
 +│   │       ├── create.html
 +│   │       ├── index.html
 +│   │       └── update.html
 +│   └── static/                   # les ressources statiques
 +│       └── style.css
 +├── tests/                        # les tests unitaires
 +│   ├── conftest.py
 +│   ├── data.sql
 +│   ├── test_factory.py
 +│   ├── test_db.py
 +│   ├── test_auth.py
 +│   └── test_blog.py
 +├── .venv/                       # L'environnement virtuel Python
 +├── README.md                    # 
 +├── install
 +└── MANIFEST.in
 +</code>
 +
 +Pour lancer l'application :
 +
 +<code bash>
 +cd /home/user/Projects/aAppProject
 +flask --app myapp run --debug
 +</code>
 +
 +<note>
 +Si le fichier est nommé ''app.py'' ou ''wsgi.py'' flask l'exécute automatiquement, l'argument ''%%--app%%'' n'est pas nécessaire.
 +</note>
 +
 +<note>
 +Pour éviter de préciser systématiquement l'argument ''%%--app%%'' on peut également définir la variable d'environnement ''FLASK_APP''.
 +</note>
 +
 +
 +===== Démarrage de l'application Flask =====
 +
 +Pour pouvoir lancer automatiquement une application Flask : 
 +  * On place les fichiers de l'application dans un paquetage Python;
 +  * Le fichier dunder init ''%%__init__.py%%'' contient :
 +      * Soit l'instanciation d'un objet de type Flask ;
 +      * Soit une fonction retournant cet objet. Cette fonction est désignée **application factory**. Par défaut flask s'attend à ce qu'elle soit appelée ''create_app''.
 +
 +Dans ce cas on peut lancer l'application avec la commande :
 +
 +<code bash>
 +flask --app aAppPackage run --debug
 +
 +# Si la fonction factory a un autre nom que create_app utiliser la syntaxe package:factory_function
 +flask --debug --app aAppPackage:another_factory_name run
 +
 +# On peut également spécifier des arguments
 +flask --debug --app 'app:create_app(context="development")' run
 +</code>
 +
 +Voir également la note [[dev:python:flask:demarrer_application|démarrer l'application Flask depuis la ligne de commande]].
 +
 +===== Références =====
 +
 +  * [[https://flask.palletsprojects.com/en/stable/patterns/packages/|Concevoir des applications en packages (Documentation Flask)]]
 +  * https://stackoverflow.com/questions/53566832/access-app-decorator-in-flask-using-factory-pattern
 +  * https://realpython.com/flask-project/
 +  * [[https://muneebdev.com/flask-project-structure-best-practices/|Bonnes pratiques de structuration des projets Flask (muneebdev.com)]]