Initiation Python

Chap 5

Framework Flask,

forms jinja

Micro-framework

Petite appli web : pas gros traffic

 

  • "Serveur" web port 5000
  • requêtes POST et GET
  • Templates pages Jinja
  • Formulaires (WTForms)
  • Sessions
  • json, API

Micro-framework

Petite appli web : pas gros traffic

Installations

apt install python3-flask # system

ou

pip install flask # locale

ou

apt install python3-pip python3-venv # env virtuels
mkdir monprojet && cd monprojet
python3 -m venv virtuel
source virtuel/bin/activate
pip install flask

Démo Flask

#!/usr/bin/env python3
from Flask import Flask

app = Flask(__name__)

@app.route('/')

def hello():
    return 'Hello World'

if __name__ == '__main__':
    app.run()

Lancement Flask

export FLASK_ENV=development # production

python3 hello.py
  1. Permet de modifier le code à la volée, sans redémarrer le service
  2. Propose une console de débug
  3. Messages verbeux

 

http://127.0.0.1:5000/

Options de Flask

Routes variées

 

@app.route('/hello/<string:username>')
def mafonction(username):
    ...
    return "Bienvenue "+username

 

http://127.0.0.1/hello/Marion

http://127.0.0.1/hello/Fatou

http://127.0.0.1/hello/Francois/

Templates jinja2

Personnaliser des fichiers HTML formatés

Dossier "templates" à créer

 

from Flask import Flask, render_template

@app.route('/accueil')
def index():
    mesdata = {"user":"François","age":49}
    return render_template('index.html', title='Home', data=mesdata)

index.html

<html>
    <head>
        <title>{{ title }} - Mon blog</title>
    </head>
    <body>
        <h1>Hello, {{ data.user }}!</h1>
        <p>Tu as {{ data.age }} ans !</p>
    </body>
</html>

 

http://127.0.0.1/accueil

Fichiers statiques

Dossier "static" à créer

pour images, css...

 

<link href="{{ url_for('"static', filename='style.css') }}" rel="stylesheet">

 

<img src="{{ url_for('static', filename='monimage.jpg') }}" >

 

Fichiers HTML élaborés

Boucles for

{% for elem in data.dist %}
...
{%  endfor %}

 

Tests

{% if a == 0: %}
...elif ... else ...
{% endif %}

 

Filtres

{{ data.user|capitalize }}, {{data.age|length }}

Requêtes

From Flask import request

@app.route('/login', methods=['GET','POST'])
pour GET :
valeur1 = request.form.get('mavaleur1') # renvoie None si vide : à privilégier
pour POST : 
valeur2 = request.form['mavaleur2']

 

Tester request.method == 'GET':

pour avoir le bon résultat

Résultat sous forme de dictionnaire : {clef = valeur}

Made with Slides.com