wiki:developpement:flask

Flask

Flask est un micro-cadriciel Python facilitant le développement d'application web. On va voir sur cette page comment mettre en place une petite application Python avec Flask.

L'installation se fait de la manière la plus simple possible en utilisant pip:

pip install flask

Il peut être également installé via le gestionnaire de paquet de certaines distribution Unix ou téléchargé directement sur le site de pypi et installé manuellement avec la commande suivante:

python setup.py install

L'arborescence du site web va ressembler à ça:

-/var/www/html/monsite
 |__ index.py
 |__ template
    |__index.html
    |__static
       |__style.css

Le moteur va se trouver dans le fichier index.py à la racine du site et contient le code suivant:

#!/usr/local/bin/python
from flask import Flask, request,render_template
app = Flask(__name__)
 
@app.route("/", methods=['GET','POST'])
def toto():
    e=0
    if request.method == 'GET':
        return render_template('coin.html', titre="Coin eater",result='Insert coin')
    else:
        a=request.form['number']
        e=int(a)
        if (e < 1) :
                return render_template('coin.html', titre="Coin eater", result="Please insert coin")
        else:
                return render_template('coin.html', titre="Coin eater", result=''.join(e))
 
 
if __name__ == "__main__":
    app.run()

Les éléments importants à prendre en compte ici sont:

  • app = Flask(name) ⇒ déclaration de l'application Flask
  • @app.route(“/”, methods=['GET','POST']) ⇒ déclaration de la route / (donc la racine du site) pouvant utiliser les méthodes GET et POST
  • return render_template('coin.html', titre=“Coin eater”,result='Insert coin') ⇒ Précise de quelle manière le résultat doit être délivré, ici on dit qu'on souhaite utiliser la page coin.html, le titre coin eater et le résultat insert coin. les arguments titre et result sont transmis au sein de la page html grâce aux balises { { titre } } et { { result } }

Le code du template sera chargé d'afficher proprement la page en utilisant le langage HTML et le langage de templating Jinja:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>{{ titre }}</title>
    </head>
 
    <body >
        <h1 style="text-align:center">{{ titre }}</h1>
         <form style="text-align:center"action="" method="post">
                 <p>Number</p>
                 <input type="text" name="number" value="10"><br>
                 <input type="submit" value="Submit">
        </form>
        <pre style="text-align:center"><h1 id="Coin">{{ result }}</h1></pre>
 
</body>
</html>

Imaginons maintenant que nous sommes en train de développer une application un peu plus importante avec plusieurs fonctions, il est possible de découper proprement le code dans plusieurs fichiers. Il suffit simplement dans le fichier index.py de renseigner les noms des autres fichiers à importer, comme dans un script Python normal.

#!/usr/local/bin/python
 
from flask import Flask, request,render_template
from eat import eatcoins
 
app = Flask(__name__)
app.register_blueprint(eatcoins)
 
@app.route("/", methods=['GET'])
def accueil():
    return render_template('accueil.html', titre="Accueil")
 
if __name__ == "__main__":
    app.run()

et le code de notre application dans le fichier eat.py:

#!/usr/local/bin/python
from flask import Flask, request,render_template,Blueprint
eatcoins = Blueprint('eatcoins', __name__)
 
@eatcoins.route("/coins/eat", methods=['GET','POST'])
 
def eat():
    e=0
    if request.method == 'GET':
        return render_template('coin.html', titre="Coin eater",result='Insert coin')
    else:
        a=request.form['number']
        e=int(a)
        if (e < 1) :
                return render_template('eat.html', titre="Coin eater", result="Please insert coin")
        else:
                return render_template('eat.html', titre="Coin eater", result=''.join(e))

Maintenant, à chaque fois qu'on se rendra sur l'url http://monsite/coins/eat, la page eat.html sera présentée.

Pour la mise en production avec Nginx, se référer à l'article dédié.

  • wiki/developpement/flask.txt
  • Dernière modification: 2020/11/05 18:39
  • de root