Créer un serveur web rapidement en python

Il peut être intéressant, dans certains cas, d'implémenter un serveur web dans votre application. Cela permet notamment une communication entre vos programmes via un navigateur. En Python créer un serveur web, c'est quelques ligne de code:

Serveur web python 2

Voici le code pour créer un serveur web en python 2:

server.py

#!/usr/bin/python
 
import BaseHTTPServer
import CGIHTTPServer
 
PORT = 8888
server_address = ("", PORT)

server = BaseHTTPServer.HTTPServer
handler = CGIHTTPServer.CGIHTTPRequestHandler
handler.cgi_directories = ["/"]
print "Serveur actif sur le port :", PORT

httpd = server(server_address, handler)
httpd.serve_forever()

Serveur web python 3

Et voici le code pour créer un serveur web en python 3:

server.py

#!/usr/bin/python3
 
import http.server
 
PORT = 8888
server_address = ("", PORT)

server = http.server.HTTPServer
handler = http.server.CGIHTTPRequestHandler
handler.cgi_directories = ["/"]
print("Serveur actif sur le port :", PORT)

httpd = server(server_address, handler)
httpd.serve_forever()

Créer une page web

Pour comprendre ce qu'il va suivre, vous devez déjà maîtriser les fondamentaux de HTML. Si ce n'est pas le cas, je vous conseille de visiter ce site: Apprendre HTML

Créez un fichier index.py à la racine de votre projet.

index.py

#!/usr/bin/python3
# -*- coding: utf-8 -*

import cgi 

form = cgi.FieldStorage()
print("Content-type: text/html; charset=utf-8\n")

print(form.getvalue("name"))

html = """<!DOCTYPE html>
<head>
    <title>Mon programme</title>
</head>
<body>
    <form action="/index.py" method="post">
        <input type="text" name="name" value="Votre nom" />
        <input type="submit" name="send" value="Envoyer information au serveur">
    </form> 
</body>
</html>
"""

print(html)

Ouvrez votre navigateur et indiquez-lui l'url de votre serveur web, dans notre cas ce sera localhost:8888/index.py

Indiquez votre nom puis cliquez sur le bouton "Envoyer":

A noter que python ne fait pas de différences entre POST et GET, vous pouvez passer une variable dans l'url le résultat sera le même:

http://localhost:8888/index.py?name=Olivier%20ENGEL

Afficher les erreurs sur votre page web

Vous pouvez ajouter une fonction qui affichera les erreurs rencontrées par python (mode debug):

import cgitb; cgitb.enable()

Afficher les variables d'environnement

Vous pouvez afficher toutes les informations concernant votre serveur web / page en cours en appelant la méthode test():

cgi.test()

Pour approfondir le sujet: Doc python CGI