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)