{{tag>dev python flask cli commande}}
====== Flask : Définir une commande CLI ======
Le framework Flask s'appuie sur le paquetage Python [[https://click.palletsprojects.com/en/stable/|Click]] pour la gestion de la ligne de commande.
On utilise les décorateurs pour déclarer u
===== Initialisation de Flask-Migrate =====
Les commandes proposées par l'extension Flask-Migrate sont regroupées sous ''flask db''. On commence par initialiser l’environnement nécessaire à... migrate -m "Initial DB Model Product"
</code>
La commande retourne quelques messages de la forme :
<fi... on-transactional DDL.
INFO [alembic.autogenerate.compare] Detected added table 'products'
Generating
é par l'application à l'exécution pour obtenir un comportement dynamique.
**Flask** s'appuie sur le mo... %'' Code Python à interpréter ;
* ''%%{# #}%%'' Commentaires.
<code html [highlight_lines_extra="8... ody>
{# Affiche le contenu de la variable msg comme titre #}
<h1>{{ msg }}</h1>
<h2>Welcome to FlaskApp!</h2>
</body>
</html>
</code>
===== R
al.html|adjacency list pattern]]) qui se présente comme une table se référençant elle même (ici via la ... ''parent_id''.
Lorsqu'on teste cet objet via la commande **flask shell** on constate que la contraint... Depuis flask shell
>>> db.create_all()
>>> # Ce comportement est correct
>>> rc = Category("root")
>>... -B") )
>>>
>>> db.session.add(rc)
>>> db.session.commit()
>>>
>>> del rc
>>>
>>> # On récupère la caté
: Démarrer l'application depuis la CLI ======
La commande **flask** permet notamment d'exécuter l'appl... dans le contexte de l'application.
Par défaut la commande tente d'importer un module ou un paquetage n... nt pas ces noms par défaut, on devra fournir à la commande flask le moyen de lancer correctement l'appl... cation via l'option ''%%--app%%''.
Dans sa forme complète, la valeur de l'option %%--app%% contient 3
oduire le même résultat :
- https://www.example.com/script?action=33257
- https://www.example.com/create/user
Dans le second cas, on peut directement comprendre le sens de l'action à la lecture de l'URL.... type **GET**. Pour qu'une route puisse prendre en compte d'autres types de méthodes HTTP (ou [[https://
able de configuration ''SQLALCHEMY_DATABASE_URI'' comme indiqué ci-dessous :
<code python>
# Pour util... susceptible de lever une exception
db.session.commit()
except (IntegrityError, OperationalErro... ===
* https://flask-sqlalchemy.palletsprojects.com/en/stable/
* https://docs.sqlalchemy.org/en/20/... rg/flask-sqlalchemy/
* https://www.slingacademy.com/article/solving-sqlalchemy-integrityerror-when-in
DOCUPDATE:
====== Flask-SQLAlchemy : relation de composition ======
La relation de composition est une forme particulière de [[dev:python:flask:flask-sqla... ion one-to-many]]. Le diagramme UML la représente comme ci-dessous :
{{mcd_relation_composition.png}}
* Une voiture (le composite) peut contenir un ou p
lisés, alors on veut les supprimer également.
Ce comportement de suppression des enregistrements orphe... **SQLAlchemy-Utils** permet de mettre en œuvre se comportement via sa fonction **auto_delete_orphans**.... Références =====
* [[https://www.digitalocean.com/community/tutorials/how-to-use-many-to-many-database-relationships-with-flask-sqlalchemy|Comment utili
db.session.add(self)
db.session.commit()
product.shop_id = self.id
db.session.add(product)
db.session.commit()
class Product(db.Model):
__tablename__... __name__ pour définir le nom du module courant
# comme root applicatif pour notre application flask
ap... roducts'' **ne retourne plus directement la liste complète** de tous les produits désignés par la relat
ules Python et l'utilisation de standards et de recommandations s'imposent. Un version monolithique dev...
Dans ce cas on peut lancer l'application avec la commande :
<code bash>
flask --app aAppPackage run -... n|démarrer l'application Flask depuis la ligne de commande]].
===== Références =====
* [[https://flask.palletsprojects.com/en/stable/patterns/packages/|Concevoir des applic
ebug=True)
</code>
Tester l'application via la commande **flask run**:
<code bash>
FLASK_APP=hellof... elopment flask run --debug
</code>
A ce stade la commande doit lancer le serveur web et afficher un me... it_button = SubmitField(label='Valider')
</code>
Comme illustré ci-dessus, le constructeur des objets ... s la vue, celui-ci est systématiquement considéré comme invalide.
Lorsqu'un formulaire hérite de ''Fl
projet. Les tests sont des fonctions dont le nom commence par ''test_'' regroupées dans des modules Python dont le nom commence également par ''test_''. Dans une approche P... ement être regroupés dans des classes dont le nom commence par ''Test''.
===== Les fixtures =====
Le ... rences =====
* [[https://flask.palletsprojects.com/en/stable/testing/|Tester les applications Flask