Python : Flask
http://www.xavierdupre.fr/app/ensae_teaching_cs/helpsphinx/notebooks/TD2A_eco_debuter_flask.html
Qu'est-ce que c'est ?
Flask est un framework web léger pour Python. Son but est d'être souple et léger. Il utilise un système de templates et est sous licence BSD.
Première page
<syntaxhighlight lang='python'>
- !/usr/bin/env python3
- coding: utf-8
from flask import Flask
- On initialise notre application, qui s'appellera donc "app".
- __name__ renverra le script lui-même.
app = Flask(__name__)
- On définit une route avec ce décorateur :
- Notre code s'applique à la racine du site.
@app.route("/")
- Voici la fonction décorée : elle s'éxecute à l'affichage de la route en question.
def hello():
return "Hi there"
if __name__ == "__main__":
#run() est la méthode qui lance notre app. Cela lance un serveur web sur le port 5000. app.run()
</syntaxhighlight>
Ici, le terme "route" fait référence à la dernière partie d'une URL, celle qui donne le chemin des fichiers : www.site.fr/undossier/unepage
Un peu de style
Pour l'instant, la page est très basique. Nous allons devoir donner à Flask une structure de dossiers qu'il comprendra, avec templates et des styles prédéfinis pour l'application. Voici un exemple:
<source> . ├── hello_world_green.py ├── static │ └── main.css └── templates
└── home.html
</source>
- hello_world_green.py est le script principal.
- static contient une feuille de style main.css
- templates contient une page html.
<syntaxhighlight lang='python'>
- !/usr/bin/env python
- -*- coding: utf-8 -*-
from flask import Flask, render_template app = Flask(__name__)
@app.route("/") def hello():
return render_template("home.html", message = "Hello World!") #render_template fait le lien entre la page html, qui est un template, et le script en lui-même. #On voit que l'appel de fonction initialise la variable message, qui est une variable utilisateur (pas définie par Flask)
if __name__ == "__main__":
app.run()
</syntaxhighlight>
#static/main.css h1 { font-size: 2em; color: green; text-align: center; }
#/templates/home.html <!doctype html> <html lang="en"> <head> <link rel ="stylesheet" type="text/css" href="{{ url_for('static', filename='main.css') }}" #Ici, on appelle le css </head> <body> <h1 > {{ message }}</h1> #On reconnaît les variables à la Jinja2 ! </body> </html>
Plusieurs pages
Tout ça c'est sympa, mais si on pouvait naviguer entre les pages ?