status: hidden
title: Python — Flask
slug: Aecheth6
robots: noindex


# flask

Cours à distance sur [flask](https://palletsprojects.com/p/flask/).

C'est le 2ème cours sur flask, si vous avez raté le premier en gros on
a utilisé [PyCharm](https://www.jetbrains.com/pycharm/) pour se créer
un projet, ce qui à automatiquement crée un venv dans lequel on a fait
un `pip install flask`. Pour ceux qui n'ont pas encore PyCharm, prenez
la version pro, elle est gratuite avec votre adresse Sup'Internet.


## Voix

Comme la dernière fois on va utiliser
[Mumble](https://fr.wikipedia.org/wiki/Mumble), un logiciel libre de
voix sur IP, prenez le temps de configurer le « push to talk » avant
de rejoindre le salon.

Documentation pour se connecter : https://docs.framasoft.org/fr/jitsimeet/mumble.html

- Salon : Sup
- Mot de passe : pomme@412


## Chat

Comme la dernière fois on va utiliser IRC sur Libera.Chat sur le salon
`#supinternet`. Utilisez
https://web.libera.chat/#supinternet si
vous n'avez pas de client IRC (ne cliquez *pas* sur "j'ai un mot de
passe", si vous n'avez pas de compte Libera.Chat).


## Étape 0 — Hello world

Suivez simplement le tutoriel officiel de flask jusqu'a avoir un hello
world fonctionnel en localhost.

Utilisez [ngrok](https://ngrok.com/) et envoyez moi l'URL sur IRC pour
que je valide cette étape.https://ngrok.com/.


Rendus:

- Maxime : http://00b15430.ngrok.io/
- Léo (Olyno) : http://afcb7f61.ngrok.io/
- Raphael : http://f34f00ff.ngrok.io/
- Ilan : http://279e0d80.ngrok.io/


## Étape 1 — Templating

Créez deux templates `index.html` et `about.html`. Flask utilise
[Jinja2](https://jinja.palletsprojects.com/en/2.11.x/templates/).

Utilisez `extends` pour avoir `base.html` avec vos tags html / head /
title / ...  et utilisez `extends` dans vos `index.html` et
`about.html` pour simplement surcharger un block `body`.


## Étape 2 — SQLite

Utilisez une base de donnée
[SQLite](https://flask.palletsprojects.com/en/1.1.x/patterns/sqlite3/#sqlite3)
dans laquelle vous crerez une seule table: `message`, avec une colonne `text`.

Implémentez deux routes: `POST /messages/` et `GET /messages/`.

Un `POST /messages/` permet d'ajouter un message (le message doit etre
dans le corps de la requête) et un `GET /messages/` permettra
d'obtenir tous les messages.

Le `POST` ne doit rien renvoyer. Le `GET` doit tout renvoyer sous
forme d'une liste JSON contenant des objets JSON, de la forme:

```json
[
    {"text": "Hello"},
    {"text": "world"}
]
```
