== Flask : Gérer l'authentification avec Flask-Login ======
Charger l'environnement virtuel Python du projet et installer le paquetage **Flask-Login** :
<code bash>
pip install Flask-Login
</code>
===== Création d'un Blueprint =====
On va s'appuye
la base de données gérée par l'ORM (SQLAlchemy). Ainsi le modèle de données définit dans l'application Flask peut être amendé/corrigé, c'est l'extension F... ate** nous allons utiliser une application Flask minimale en configuration monolithique avec une classe de modèle simple : ''Product''.
===== Installation =====
Création d'un environnement virt
{{tag>dev python flask templates jinja2}}
====== Flask : Utilisation des templates ======
===== Gé... st une page web à trous. Il contient des sections invariantes en HTML/javascript directement interprétables par le navigateur web et des sections dynamiqu... t dynamique.
**Flask** s'appuie sur le moteur **Jinja2** pour la gestion des templates. Plusieurs élé
ask-SQLAlchemy : Forcer la vérification des contraintes sur une base SQLite3 ======
Notes concernant l'activation des contraintes sur clé étrangère (FK) sur les bases de type S... LAlchemy.
===== Problématique =====
Une contrainte de type **FK**((**F**oreign **K**ey)) est définie dans notre modèle mais ne semble pas s'appliquer.
s en POO.
Ici on utilise le paquet Flask-WTF qui intègre la bibliothèque WTForms au micro framework Flask.
===== Initialiser l'application Flask =====
Création d'un dépôt git pour le projet et initialisation de l'application Flask :
<code bash>
git init hello-wtf
cd hello-wtf/
git branch -m main
# C
alchemy relation}}
====== Flask-SQLAlchemy : Définir une relation d'agrégation ======
La relation d... sition sans appartenance** : la suppression d'une instance de la classe regroupant les agrégats n'entraine pas la suppression des agrégats.
Un exemple de... lis est entreposé dans un seul entrepôt : cela définit bien une association un à plusieurs (one to man
utage ======
===== A propos des routes =====
Définir une URL ayant un sens pour l'utilisateur est pr... ie de faire correspondre cette URL à une route définie dans votre code. Si une correspondance est trou... lise sur les objets de type ''Flask'' ou ''Bluenprint''.
===== Route statique =====
Dans sa forme la... on à une URL statique :
<code python [highlight_lines_extra="1"]>
@app.route('/hello')
def hello():
roducts.png}}
MCD via diagramme UML
* Un magasin (Shop) vend un ou plusieurs produits (Product);
* Un produit est stocké dans un seul magasin.
===== Implémentation =====
Ci-dessous l'application Flask minimaliste implémentant les deux classes du modèle e... lation one-to-many.
<code python app.py [enable_line_numbers=“true”]>
from flask import Flask
from fl
SQLAlchemy est un **ORM** (Object-Relational Mapping) il permet de traduire les objets Python en donn... être enregistrées dans un SGBD externe.
===== Installation =====
Pour pouvoir utiliser l'extension, installer le module **Flask-SQLAlchemy**
<code bash>
# Dans votre environnement virtuel
pip install Flask-SQLAlchemy
</code>
===== Options de c
Flask n'impose aucune arborescence, selon les besoins on peut opter pour une application monolithique ... ralement un simple module Python qui se charge d' instancier directement l'objet Flask. Cette approche... 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 f
v python flask cli commande}}
====== Flask : Définir une commande CLI ======
Le framework Flask s'a... version():
"""Show application version."""
print("0.0.1")
</code>
La commande ''version'' retour... ment le numéro de version du programme. On peut maintenant invoquer la commande depuis l'interpréteur :
<code bash>
flask version
</code>
===== Groupes
és entre les tests. Ces fixtures permettent de définir un environnement constant et reproductible à l'intérieur duquel les tests peuvent s'exécuter.
Dans... leur, mais la fixture peut également se charger d'initialiser un contexte, produire une valeur (via yi... mer le contexte de travail une fois les tests terminés.
On définit les fixtures dans le module ''test