{{tag>dev python flask web api}}
====== Flask ======
Flask n'impose aucune arborescence, cependant lorsque les projets grossissent ou pour pouvoir travailler en équipe, il est judicieux d'adopter certaines recommandations :
/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
Pour lancer l'application :
cd /home/user/Projects/aAppProject
flask --app myapp run --debug
Si le fichier est nommé ''app.py'' ou ''wsgi.py'' flask l'exécute automatiquement, l'argument ''%%--app%%'' n'est pas nécessaire.
===== La fonction "Factory" =====
Pour pouvoir lancer automatiquement une application Flask :
* On place les fichiers de l'application dans un paquetage ;
* Le fichier ''__init__.py'' contient soit l'instanciation d'un objet de type Flask, soit une fonction retournant cet objet. Cette fonction est désignée **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 :
flask --app aAppPackage run --debug
# Si la fonction factory a un autre nom que create_app utiliser la syntaxe package:factory_function
flask --app aAppPackage:another_factory_name run --debug
===== Références =====
* https://stackoverflow.com/questions/53566832/access-app-decorator-in-flask-using-factory-pattern
* https://realpython.com/flask-project/