Exemple d'utilisation de Flask

Exemple d’utilisation de Flask #

Example flask contenant :

  • redirection
  • code d’erreur (ici 403) avec abort
  • récupération des paramètres GET
  • récupération des paramètres POST
  • réalisation d’un formulaire
  • utilisation d’un template Jinja2
  • utilisation de url_for
  • renvoi de données au format Json (pour Api Rest)

Enregistrer les deux fichiers dans le même répertoire :

<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">

<!-- ======================= head ========================== -->
<title>Titre : {{ title }}</title>
</head>

<body>
<div>
{{ data | safe }}
</div>
<div id="footer">
<hr/>
<a href="{{ url_for('info') }}">home</a>
 - <a href="{{ url_for('paramurl', number=42) }}">paramurl</a>
 - <a href="{{ url_for('formulaire') }}">formulaire</a>
 - <a href="{{ url_for('paramget') }}?login=toto">paramget</a>
 - <a href="{{ url_for('data_json') }}">data_json</a>
 - <a href="{{ url_for('redirect_me') }}">redirect_me</a>
 - <a href="{{ url_for('forbidden') }}">forbidden</a>
</div>
</body>
</html>
#!/bin/env python3

import flask
TPL = flask.render_template # Pour éviter de toujours taper flask.render_template...

app = flask.Flask(__name__, template_folder='.')

@app.route('/')
def info():
    data = """\
    Bonjour Visiteur
    """
    return TPL("default.html", title='Home', data=data)

@app.route('/paramurl/<int:number>')
def paramurl(number):
    data = """\
    Vous avez mis  {} dans l'URL.
    """.format(number)
    return TPL("default.html", title='ParamUrl', data=data)

@app.route('/paramget')
def paramget():
    login = flask.request.args['login']
    data = """\
    Le login entré est {}.
    """.format(login)
    return TPL("default.html", title='Paramget', data=data)

@app.route('/formulaire')
def formulaire():
    data = """\
    <form action="validate" method="post">
    <input type="text" name="login"/><br/>
    <input type="submit"/>
    </form>
    """
    return TPL("default.html", title='Formulaire', data=data)

# Récupération des données d'un formulaire, en POST uniquement
# Si les données sont postées en json et non en
# application/x-www-form-urlencoded ou multipart/form-data
# utiliser flask.request.get_json()  au lieu
# de flask.request.form
@app.route('/validate', methods=["POST"])
def validate():
    login = flask.request.form['login']
    data = """\
    Le login entré est {}.
    """.format(login)
    return TPL("default.html", title='Validate', data=data)


# Renvoie du json
@app.route('/data_json')
def data_json():
    liste = [1, 2, 3, "toto"]
    dico = {"val1": liste, "val2": "Salut"}
    return flask.jsonify(dico) # Renvoie la chaîne json en gérant correctement l'entête HTTP

# Code de retour :
# https://fr.wikipedia.org/wiki/Liste_des_codes_HTTP
@app.route('/forbidden')
def forbidden():
    flask.abort(403)

@app.route('/redirect_me')
def redirect_me():
    return flask.redirect(flask.url_for('info'))

print("PATH =====>", app.instance_path)
if __name__ == '__main__':
    app.config['DEBUG'] = True
    app.secret_key = 'chooseaverysecretkeyhere'
    app.run(host='0.0.0.0', port=5000)