PYTHON
APPLICATIONS WEB COTE SERVEUR
Objectif
Dans une application web, les données peuvent être traitées coté serveur ou coté client.
De manière simplifiée :
- Au début des années 2000, les données étaient traitées coté serveur et affichées coté client.
- De nos jours, avec le développement du JavaScript, les données se traitent tantôt coté serveur,
tantôt coté client.
Différents langages traitent les données coté serveur : PHP, JavaScript (avec Node.js...), C++, PERL, Python...
- Avantages :
- Le serveur peut sauvegarder les données.
- Le code envoyé au client est moins volumineux.
- Inconvénients :
- Envoyer des données au serveur et attendre le retour des données traitées prend un peu de temps.
- Le traitement des données coté serveur augmente la charge du serveur.
- Particularité : Le client n'a pas accès au code sur le serveur qui traite les données.
Comprendre
Créer un serveur web
- Avec l'EDI EduPython, recopiez le code ci-dessous pour créez un serveur web démarrant sur le port 5555.
import http.server
adr=("", 5555)
mod=http.server.CGIHTTPRequestHandler
mod.cgi_directories=["/"]
http.server.HTTPServer(adr, mod).serve_forever()
- Enregistrez dans le dossier de votre choix, sur votre clé USB par exemple.
Créer deux pages web
Comme à votre habitude :
- Utilisez un éditeur de texte (Notepad++, Sublime Text).
- Vérifiez la sélection de l'encodage UTF-8.
- Enregistrez les deux fichiers ci-dessous dans le même dossier que celui choisi pour le serveur.
Page index.py
print("Content-type: text/html; charset=utf-8\n")
html="""<!DOCTYPE html>
<html>
<head>
<title>Saisie d'un nom</title>
<meta charset="utf-8">
</head>
<body>
<form action="/bonjour.py">
Entrez votre nom :
<input name="nom"><br>
Indiquez votre age :
<input name="age"><br>
<button>Valider</button>
</form>
</body>
</html>"""
print(html)
Page bonjour.py
import cgi
formulaire=cgi.FieldStorage()
nom=formulaire.getvalue('nom')
age=formulaire.getvalue('age')
age=int(age)
print("Content-type: text/html; charset=utf-8\n")
print("<!DOCTYPE html><html><head><meta charset=\"utf-8\"></head><body>")
print("Bonjour "+nom+". ")
if (age<18):
print("Tu es une personne mineure.")
else:
print("Tu es une personne majeure.")
print("</body></html>")
Tester
- Démarrez votre serveur web.
- Testez votre serveur en tapant dans la barre d'adresse d'un navigateur :
- http://localhost:5555/index.py
- http://127.0.0.1:5555/index.py
- Retrouvez l'adresse IP de votre PC et proposez à votre voisin (ou voisine) de tester votre serveur web.
Pratiquer
Gérer les erreurs
- Dans le programme précédent, que se passe-t-il lorsque l'utilisateur oublie d'entrer une donnée?
Corriger le problème :
...
if not nom :
nom="inconnu"
...
- Modifier la page
bonjour.py
:
- En ajoutant un lien vers la page
index.py
.
- Pour demander à l'utilisateur de recommencer en cas d'erreur.
Récupérer les données sur le serveur
Lorsque les données sont nombreuses, il est préférable de charger sur le client que celles demandées.
Réalisez une application web :
- Qui demande à l'utilisateur le nom d'un astre.
- Qui retourne :
- Si l'astre est répertorié son rayon et sa masse.
- Sinon un message indiquant que l'astre n'est pas référencé.
Astre | Rayon (km) | Masse ( 1024 kg) |
Soleil | 696 000 | 1 990 000 |
Mercure | 2 440 | 0,330 |
Vénus | 6 050 | 4,87 |
Terre | 6 380 | 5,97 |
Lune | 1 740 | 0,0734 |
Mars | 3 400 | 0,642 |
Approfondir
On choisit ici d'envoyer au serveur les données pour qu'il les traite puis retourne au client son résultat.
Réalisez une application web :
- Qui demande à l'utilisateur de rentrer, pour un astre :
- Son rayon, en km
- Sa masse, en 1024 kg
- Qui retourne :
- Son volume, en km3
- Sa masse volumique, en kg/dm3
Le volume d'une sphère se calcule avec la relation :
V = 4.π.R33