===== 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
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é
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
: 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
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
Dans ce cas on peut lancer l'application avec la commande :
<code bash>
flask --app aAppPackage run -... rences =====
* [[https://flask.palletsprojects.com/en/stable/patterns/packages/|Concevoir des applic... (Documentation Flask)]]
* https://stackoverflow.com/questions/53566832/access-app-decorator-in-flask-using-factory-pattern
* https://realpython.com/flask-project/
* [[https://muneebdev.com/flask-
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 ... ion Framework CSS Spectre]]
* https://zephyrnet.com/fr/manipulation-de-formulaires-en-flacon-avec-fla
tantes d'une application Flask depuis la ligne de commande :
<code bash>
# Affiche les route de l'appl... férences =====
* https://flask.palletsprojects.com/en/stable/api/#url-route-registrations
* https://flask.palletsprojects.com/en/stable/patterns/lazyloading/#converting-to-centralized-url-map
* https://stackoverflow.com/questions/12162634/where-do-i-define-the-domain-t
n_one-to-many|relation one-to-many]]. C'est une **composition sans appartenance** : la suppression d'un... ette association.
On peut tester rapidement le comportement du modèle avec la commande **flask shell** (mode interactif dans le contexte de l'application... ession.add_all([repo, p1, p2, p3])
>>> db.session.commit()
>>>
>>> # Récupère et affiche les colis
>>>