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.

Installation

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

Architecture

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

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

Moteur

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 } }

Template

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>

Découpage en plusieurs fichiers

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.

Mise en production

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

wiki/flask.txt · Dernière modification: 2018/04/26 20:47 par root
CC0 1.0 Universal
Powered by PHP Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0 Valid HTML5