Site Web, exemple avec Flask#

En entreprise, on a parfois besoin d’exposer de partager des données d’une machine à une autre, d’exécution des scripts sur une machine distante sans avoir à installer le langage Python. Dans le cas, le module Flask permet de créer facilement un site web.

Tutoriel#

C’est un notebook qui fait partie de l’ensemble Python pour un économiste.

Outils pour tester un site#

Unit Test#

Cet exemple contient une fonction shutdown qui permet de dire au serveur de s’interrompre si jamais un lui demande un certain url. Dans ce cas, on peut écrire un test unitaire qui :

  • démarrer le serveur depuis un thread

  • essaye différents urls et vérifie le résultat

Cela donne

import sys, os, unittest, requests
from pyquickhelper.loghelper import fLOG, get_url_content
from ensae_teaching_cs.td_1a.simple_flask_site import app
from ensae_teaching_cs.td_1a.flask_helper import FlaskInThread

class TestSimpleFlask(unittest.TestCase):

    def test_flask(self) :
        fLOG (__file__, self._testMethodName, OutputPrint= __name__ == "__main__")

        th = FlaskInThread(app, host="localhost", port=8025)
        th.start()

        site = "http://localhost:8025/"

        # main page
        c = get_url_content(site)
        self.assertIn("Simple Flask Site", c)

        # exception
        c = get_url_content(site + "help/exception")
        self.assertIn("STACK:", c)

        # help for
        c = get_url_content(site + "help/ask/for/help")
        self.assertIn("help for command: ask/for/help", c)

        # shutdown
        c = requests.post(site + "shutdown/")
        self.assertIn("Server shutting down...", c.text)

La fonction get_url_content récupère le contenu d’une page HTML. Pour faire bien, elle devrait prendre un compte un timeout.

L’autre astuce consiste à attraper les exceptions dans le serveur puis à retourner la pile des exceptions afin que le programmeur débugge facilement le code du serveur. Dans le cas contraire, il faut ajouter des lignes logs dans le serveur pour savoir ce qu’il fait. C’est de toutes façons une bonne habitude à prendre.

A noter : le module requests simplifie beaucoup de choses dès qu’on commence à se pencher sur des problèmes d’authentification.

Autres alternatives#

Le module Flask Pour des sites plus conséquents, la référence est django.

autobahn/python permet d’écrire simplement des sites qu’on programme par événements. Cela permet de ne pas laisser le serveur bloqué pendant qu’il effectue un traitement. Enfin, brython permet de remplacer le javascript par python. Plus simple à coder lorsqu’on ne connaît pas javascript mais cela revient à se priver de tout un tas d’outils écrit dans ce langage : jquery, angularJS, node.js, deno, meteor

Une dizaine de modules Python permettant de créer un site web sont comparées par Python’s Web Framework Benchmarks. django est le choix le plus connu pour un site web professionnel écrit en Python. Flask est la référence pour un site minimaliste ou micro-frameworks mais il ne gère pas très bien la désynchronisation et une seule requête peut être géré en même temps. Le projet falcon est plus rapide ou encore tornado.