Académique Documents
Professionnel Documents
Culture Documents
Support_Cours_Python
La version spécifique de HTTP a suivi. HTTP et HTTP/2 sont les deux versions.
Une URL. Cela pointe vers la ressource sur le Web.
Une méthode HTTP. Cela indique l'action spécifique que la demande s'attend à
recevoir du serveur dans sa réponse.
En-têtes de requête HTTP. Cela inclut des données telles que le type de navigateur
utilisé et les données que la demande recherche auprès du serveur. Il peut également
inclure des cookies, qui affichent des informations précédemment envoyées par le
serveur traitant la demande.
Un corps HTTP. Il s'agit d'informations facultatives dont le serveur a besoin à partir de
la demande, telles que les formulaires d'utilisateur - identifiants de connexion par nom
d'utilisateur/mot de passe, réponses courtes et téléchargements de fichiers - qui sont
soumis au site Web.
1
1.3.1.1 Qu'est-ce qu'une méthode HTTP ?
Une méthode HTTP, parfois appelée verbe HTTP, indique l'action que la requête HTTP attend
du serveur interrogé. Par exemple, deux des méthodes HTTP les plus courantes sont 'GET' et
'POST' ; une requête "GET" attend des informations en retour (généralement sous la forme
d'un site Web), tandis qu'une requête "POST" indique généralement que le client soumet des
informations au serveur Web (telles que des informations de formulaire, par exemple un nom
d'utilisateur et un mot de passe soumis).
GET :
La méthode http GET demande une représentation de la ressource spécifiée. Les requêtes
utilisant GET ne doivent être utilisées que pour demander des données (elles ne doivent pas
inclure de données).
La demande a un corps Non
Sûr Oui
Idempotent Oui
Cacheable Oui
POST
La méthode http POST envoie des données au serveur. Le type du corps de la requête est
indiqué par l’en- Content-Type tête.
La différence entre PUT et POST est que PUT est idempotent : l'appeler une ou plusieurs fois
successivement a le même effet (ce n'est pas un effet secondaire), où des identiques successifs
POST peuvent avoir des effets supplémentaires, comme passer une commande plusieurs fois.
Une POST requête est généralement envoyée via un formulaire HTML et entraîne une
modification sur le serveur. Dans ce cas, le type de contenu est sélectionné en mettant la chaîne
adéquate dans l' enctype attribut de l' <form>élément ou l' form enctype attribut des éléments
<input>ou <button>.
La demande a un corps Oui
Sûr Non
Idempotent Non
2
Cacheable Uniquement si les informations de fraîcheur
sont incluses
PUT
La méthode de requête HTTPPUT crée une nouvelle ressource ou remplace une représentation
de la ressource cible par la charge utile de la requête.
La différence entre PUT et POST est que PUT est idempotent : l'appeler une ou plusieurs fois
successivement a le même effet (c'est-à-dire pas d'effet secondaire), alors que des requêtes
identiques successives POST peuvent avoir des effets supplémentaires, comme passer une
commande plusieurs fois.
La demande a un corps Oui
Sûr Non
Idempotent Oui
Cacheable Non
DELETE
La méthode de requête http DELETE supprime la ressource spécifiée.
La demande a un corps Peut
Sûr Non
Idempotent Oui
Cacheable Non
3
1.3.1.2 Que sont les en-têtes de requête HTTP ?
Les en-têtes HTTP contiennent des informations textuelles stockées dans des paires clé-valeur,
et elles sont incluses dans chaque requête HTTP (et réponse, nous en reparlerons plus tard).
Ces en-têtes communiquent des informations essentielles, telles que le navigateur utilisé par le
client et les données demandées.
Code d'état HTTP, qui indique l'état de la demande au périphérique client. Les
réponses peuvent indiquer un succès, une réponse informative, une redirection ou des
erreurs côté serveur ou côté client.
Les en-têtes de réponse HTTP, qui envoient des informations sur le serveur et les
ressources demandées.
Un corps HTTP (facultatif). Si une demande aboutit, celle-ci contient les données
demandées sous forme de code HTML, qui est traduit en une page Web par le
navigateur client.
4
200 d'accord. Cela signifie que la requête, telle que GET ou POST, a fonctionné et est
en cours de traitement.
300 déplacés de façon permanente. Ce code de réponse signifie que l'URL de la
ressource demandée a été modifiée de façon permanente.
401 Non autorisé. Le client, ou l'utilisateur faisant la demande au serveur, n'a pas été
authentifié.
403 Interdit. L'identité du client est connue mais n'a pas reçu d'autorisation d'accès.
404 Non trouvé. C'est le code d'erreur le plus fréquent. Cela signifie que l'URL n'est
pas reconnue ou que la ressource à l'emplacement n'existe pas.
500 Erreur de serveur interne. Le serveur a rencontré une situation qu'il ne sait pas
gérer.
1.3.3 Conclusion
HTTP est un protocole extensible facile à utiliser. La structure client-serveur, combinée à la
possibilité d'ajouter des en-têtes, permet à HTTP de progresser parallèlement aux capacités
étendues du Web.
Bien que HTTP/2 ajoute une certaine complexité en incorporant des messages HTTP dans des
trames pour améliorer les performances, la structure de base des messages est restée la même
depuis HTTP/1.0. Le flux de session reste simple, ce qui permet de l'étudier et de le déboguer
avec un simple moniteur de messages HTTP.
5
2 Chapitre 2 : python /MySQL
2.1 Introduction
Python est un langage de programmation. Il est l'un des langages de programmation les plus
intéressants du moment. Facile à apprendre, python est souvent utilisé en exemple lors de
l'apprentissage de la programmation. Vous trouverez sur ce site des cours / tuto informatiques
qui vous enseigneront les bases pour la compréhension de ce langage. Pour les développeurs
plus expérimentés le site vous indiquera quelques astuces pour vos projets.
Python est un langage de programmation interprété, c'est-à-dire qu'il n'est pas nécessaire de le
compiler avant de l'exécuter. Si vous avez déjà touché un peu à la programmation, vous verrez
que ce langage possède une certaine poésie. Les programmeurs s'amusent souvent à trouver la
manière la plus élégante et efficace d'écrire une suite d'instructions.
* Web: Aujourd'hui python combiné avec le Framework Django est un très bon choix
technologique pour des gros projets de sites internet.
* Système: Python est également souvent utilisé par les admin système pour créer des
tâches dites répétitives ou simplement de maintenance. D'ailleurs si vous voulez créer des
applications java en codant en python, c'est possible grâce au projet Jython.
Passer de:
print "bonjour"
Print ("bonjour")
Ce changement fait begguer toutes vos applications python 2 exécutées en python 3, puisque
print est très souvent utilisé.
6
2.6 PIP c'est quoi?
Pip est un système de gestion de paquets utilisé pour installer et gérer des librairies écrites en
Python. Vous pouvez trouver une grande partie de ces librairies dans le Python Package Index
(ou PyPI). Pip empêche les installations partielles en annonçant toutes les exigences avant
l'installation.
Un langage standardisé -SQL- est dédié à cette structure et permet aussi bien de faire des
recherches mais aussi des modifications ou des suppressions.
Les logiciels de gestion de bases de données les plus utilisées aujourd'hui sont des SGBDR -
Système de gestion de base de données relationnelles -, c'est à dire que les données sont liées
les unes aux autres, par exemple on peut définir que si on supprime une information, d'autres
informations dépendantes de cette dernière soient elles-aussi automatiquement supprimées.
Cela garantit une cohérence de données.
Il ne faut donc pas confondre une base de données qui est un conteneur et le SGBDR qui est
un logiciel de gestion de bases de données.
Mysql : Mysql est l'un des SGBDR les plus utilisés au monde. Il est gratuit et très
puissant. Il possède la double licence GPL et propriétaire depuis son rachat par Sun
Microsystem eux-mêmes racheté par Oracle (concurrent direct de MySQL). Le logiciel
reste cependant entièrement gratuit et libre. Il répond à une logique client/serveur, c'est
à dire que plusieurs clients (ordinateurs distants) peuvent se connecter sur un seul
serveur qui héberge les données.
7
Sqlite : SQLite est une bibliothèque écrite en C. SQLite est parfait pour les petits projets.
Sa particularité est d'être intégrée directement à un programme et ne répond donc pas
à la logique client-serveur. Il est le moteur de base de données le plus distribué au
monde puisqu’il est intégré à de nombreux logiciels grand public comme Firefox,
Skype, Adobe, etc. Le logiciel pèse moins de 300 ko et peut donc être intégré à des
projets tournant sur de petits supports comme les smartphones. Souvent aucune
installation n'est nécessaire pour l'utiliser.
Oracle : Oracle Database est sous licence propriétaire, c'est à dire payant. Il est souvent
utilisé pour les projets à gros budget nécessitant de réaliser des actions complexes.
Microsoft SQL Server : Produit Microsoft ne tourne que sur un OS Windows, payant
n'apporte rien de plus que les logiciels concurrents libre de droit. Si vous avez trop
d'argent à la limite...
2.9.1 MySQL
Installation de MySQL
Tout d'abord il vous faudra installer le paquet MySQL-server en tapant la commande suivante
2.9.2 Python
Installation de python3 sous linux
Pour installer python3, on exécute la commande suivante : #apt
install python3
8
2.9.3 Installation de pip3
Pour installer pip3, on installe le paquet suivant :
CRUD est un acronyme des noms des quatre opérations de base de la gestion de la persistance
des données et applications :
• Create (créer)
• Read ou Retrieve (lire)
• Update (mettre à jour)
9
• Delete ou Destroy (supprimer)
2.9.5.2 Les étapes de base pour créer une application CRUD
1- Créer une base de données dans MySQL : Tout d’abord, nous devons créer
une base de données MySQL dans votre serveur. Nous pouvons utiliser l’interface graphique
de votre gestionnaire de base de données préféré ou utiliser la ligne de commande pour créer
la base de données.
2- Créer au minimum une table : nous devons créer au minimum une table dans
notre base de données pour pouvoir stocker les données de notre application. Définissez les
colonnes de la table pour stocker les informations dont nous avons besoin. Par exemple, si
nous créons une application pour gérer une banque, nous pouvons créer une table “client” avec
les colonnes “nom”, “prénom”, “email”, etc.
On vous demandera votre mot de passe mais root par défaut n’a pas de mot de passe.
Une fois la console MySQL ouverte, nous pouvons créer votre base de données.
10
2.9.5.4 Création de la base de données banque
#create database banque ; : c’est la commande pour créer une base de données sous
MySQL.
#use banque ; : c’est la commande qui nous permet de sélectionner notre base de
données
11
2.9.5.7 Attribution des droits.
On va donner les droits de privilèges de notre base de données à notre utilisateur nasry en
faisant la commande suivante :
#nano crudpython.py
Et quand on lance notre programme python avec python3 + le nom du fichier (crudpython.py)
on voit bien que notre programme se connecte bien sur notre base de données, récupère les
informations et les affiches.
#python3 crudpython.py
12
2.9.5.10 Programme d’insertion.
Création d’un programme python qui permet d’insérer de données dans notre base de données
plus précisément dans la table client.
crudpython.py
13
#python3 crudpython.py
On remarque bien que le client 4 qui avait avant 333 comme code, il a maintenant 4444 comme
code.
Avant modification.
Apres modification.
14
#python3 crudpython.py
Avant suppression.
Apres suppression.
Donc en résumer :
15
Pymsql :
Les fonctions :
• Database () : qui nous permet de se connecter dans la base de données.
• lecture () : qui nous permet de récupérer les informations et les affiches.
• Insertion () : qui nous permet d’insérer des données dans la base de données
(table client).
• Modifier () : qui nous permet de modifier des données dans la table client.
• Supprimer () : qui nous permet de supprimer des données dans la table client.
Commit () : sur les trois derniers programmes (insert, modification,
suppression) : qui est important lorsqu’on fait des actions dans la base de
données (table).
16
3 Chapitre 3 Python/ MySQL apache2/CGI
3.1 CGI
La CGI (Common Gateway Interface) est un protocole qui permet aux serveurs Web de
communiquer avec des applications ou des scripts exécutés côté serveur. Ces scripts sont
généralement écrits dans des langages de programmation tels que Python.
17
3.2.6 Permissions d'exécution :
Pour que le serveur Web puisse exécuter votre script CGI, assurez-vous de lui accorder les
bonnes permissions d'exécution. Vous pouvez généralement définir ces permissions via les
commandes chmod dans un terminal.
#!/usr/bin/python3
print("Content-Type: text/plain")
print("")
http://localhost/cgi-bin/programme.py
18
Pour pouvoir se connecter sur notre serveur de base de données MySQL :
19
Affichage des utilisateur déjà créer :
root@nasry-ahamadi:/usr/lib/cgi-bin# cd crudpythoncgi/
<html>
<head>
<title>insertion</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
rel="stylesheet" integrity="sha384-
20
rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG6
5" crossorigin="anonymous">
</head>
<body>
<h1 class="text-center">Formulaire</h1>
<div class="mb-3">
</div>
<div class="mb-3">
</div>
<div class="mb-3">
</div>
<div class="mb-3">
</div>
<div class="mb-3">
</div>
<div class="offset-5">
</div>
</form>
</body>
</html>
Voici notre code qui permet de faire l’insertion d’un client dans la base de données :
#!/usr/bin/python3
import pymysql,cgi,cgitb
def database():
global conn,curseur
conn=pymysql.connect(host="localhost",user="nasry",passwd="passer",database="banque")
curseur=conn.cursor()
22
def insertion(prenom,nom,code,numcompte,solde):
database()
val=(prenom,nom,code,numcompte,solde)
curseur.execute(req,val)
conn.commit()
print("Content-Type:text/plain")
print("")
print("insertion reussi")
form=cgi.FieldStorage()
prenom=form.getvalue('prenom')
nom=form.getvalue('nom')
code=form.getvalue('code')
numcompte=form.getvalue('numcompte')
solde=form.getvalue('solde')
insertion(prenom,nom,code,numcompte,solde)
23
Attribution des droits d’exécution :
http://localhost/python-cgi/insert.html
24
mysql> select * from client;
Voici notre code python qui permet d’afficher les clients qui existent dans la base de données
sans l’utilisation du bootstrap :
#!/usr/bin/python3
import pymysql
def database():
global conn,curseur
25
conn=pymysql.connect(host="localhost",user="nasry",passwd="passer",database="banque")
curseur=conn.cursor()
def affiche():
database()
curseur.execute(req)
print("Content-Type:text/html")
print("")
print("<body><table
border='1px'><tr><td>Prenom</td><td>Nom</td><td>Code</td><td>Numcompte</td><td
>Solde</td></tr>")
print(f"<tr><td>{row[1]}</td><td>{row[2]}</td><td>{row[3]}</td><td>{row[4]}</td><td
>{row[5]}</td></tr>")
print("</table></body>")
affiche()
26
Test cote navigateur :
http://localhost/cgi-bin/crudpythoncgi/affiche.py
Voici notre code python qui permet d’afficher les clients qui existent dans la base de données
en utilisant aussi du bootstrap :
#!/usr/bin/python3
import pymysql
def database():
curseur = conn.cursor()
def affiche():
database()
curseur.execute(req)
print("Content-Type:text/html")
27
print("")
print("<!DOCTYPE html>")
print("<html>")
print("<head>")
print("<title>Client Data</title>")
print('<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.2.3/css/bootstrap.min.css">')
print("</head>")
print("<body>")
print('<div class="container">')
print("<tr><td>Prenom</td><td>Nom</td><td>Code</td><td>Numcompte</td><td>Solde
</td></tr>")
print(f"<tr><td>{row[1]}</td><td>{row[2]}</td><td>{row[3]}</td><td>{row[4]}</td><td
>{row[5]}</td></tr>")
print("</table>")
print('</div>')
print("</body>")
print("</html>")
affiche()
28
Attribution des droits d’exécution :
http://localhost/cgi-bin/crudpythoncgi/affiche1.py
<html>
<head>
29
<title>insertion</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
rel="stylesheet" integrity="sha384-
rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG
65" crossorigin="anonymous">
</head>
<body>
<div class="mb-3">
</div>
<div class="mb-3">
</div>
<div class="offset-5">
</div>
</form>
</body>
</html>
30
Voici notre code python qui permet de faire la mise à jour du solde d’un client quand le client
saisit son code :
#!/usr/bin/python3
import pymysql,cgi,cgitb
def database():
global conn,curseur
conn=pymysql.connect(host="localhost",user="nasry",passwd="passer",database="banque")
curseur=conn.cursor()
def update(code,solde):
database()
val=(solde,code)
curseur.execute(req,val)
conn.commit()
print("Content-Type:text/plain")
print("")
31
form=cgi.FieldStorage()
code=form.getvalue('code')
solde=form.getvalue('solde')
update(code,solde)
http://localhost/python-cgi/update.html
32
mysql> select * from client;
<html>
<head>
<title>insertion</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
rel="stylesheet" integrity="sha384-
rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG
65" crossorigin="anonymous">
</head>
<body>
33
<div class="offset-5 my-4 col-3">
<div class="mb-3">
</div>
<div class="offset-5">
</div>
</form>
</body>
</html>
#!/usr/bin/python3
import pymysql,cgi,cgitb
def database():
global conn,curseur
34
conn=pymysql.connect(host="localhost",user="nasry",passwd="passer",database="banque")
curseur=conn.cursor()
def suppression(code):
database()
val=(code,)
curseur.execute(req,val)
conn.commit()
print("Content-Type:text/plain")
print("")
print("suppression reussie")
form=cgi.FieldStorage()
code=form.getvalue('code')
suppression(code)
35
Attribution des droits d’exécution :
http://localhost/python-cgi/suppression.html
Avant suppression :
Apres suppression :
36
3.4 Curl :
Le client cURL est un outil en ligne de commande couramment utilisé pour effectuer des
requêtes HTTP. Vous pouvez utiliser cURL pour envoyer des requêtes avec différents verbes
HTTP en utilisant l'option -X suivie du verbe approprié. L'option -d permet de spécifier les
données à inclure dans le corps de la requête.
3.5 Voici une explication détaillée de chaque verbe et de la manière dont ils
sont mis en œuvre avec Curl :
3.5.1 GET :
Le verbe GET est utilisé pour récupérer des données depuis un serveur. Il s'agit d'une opération
sans effet de côté, ce qui signifie qu'elle ne devrait pas modifier l'état du serveur. Lorsque vous
effectuez une requête GET, vous demandez au serveur de vous fournir des données
spécifiques.
3.5.2 POST :
Le verbe POST est utilisé pour envoyer des données au serveur, souvent dans le but de créer
une nouvelle ressource. Les données sont incluses dans le corps de la requête. Cela peut être
utilisé pour soumettre des formulaires en ligne ou pour envoyer des données structurées.
Ici, Curl envoie une requête POST à l'URL donnée avec les paramètres spécifiés dans le corps
de la requête.
3.5.3 PUT :
Le verbe PUT est utilisé pour mettre à jour une ressource existante sur le serveur ou pour créer
une nouvelle ressource si elle n'existe pas. Comme avec POST, les données à mettre à jour
sont incluses dans le corps de la requête.
Cette commande envoie une requête PUT pour mettre à jour la ressource avec l'ID 123 en
utilisant les données fournies.
3.5.4 DELETE :
Le verbe DELETE est utilisé pour supprimer une ressource spécifiée sur le serveur.
37
Exemple d'utilisation avec Curl :
Dans cet exemple, Curl envoie une requête DELETE pour supprimer la ressource avec l'ID
123.
Pour chaque verbe, les données peuvent être passées dans le corps de la requête avec l'option
-d, comme illustré dans les exemples ci-dessus. Cependant, pour les requêtes GET et DELETE,
les données sont généralement passées sous forme de paramètres d'URL plutôt que dans le
corps de la requête.
Avant insertion :
38
Apres insertion :
39
3.6.4 Utilisation de DELETE
root@nasry-ahamadi:/usr/lib/cgi-bin/crudpythoncgi# curl -X DELETE "http://localhost/cgi-
bin/crudpythoncgi/suppression.py" -d "code=2222"
Avant suppression :
Apres suppression :
40
4 Chapitre 4 : Python/ PostgreSQL / apache2/CGI
4.1 Présentation de PostgreSQL
PostgreSQL est un système de gestion de bases de données relationnelles puissant et open-
source. Il est largement utilisé pour le stockage et la récupération des données dans les
applications modernes.
Tables : Les tables sont des structures de données fondamentales dans PostgreSQL.
Chaque table a un nom unique et est composée de colonnes qui définissent les attributs
des données que la table va contenir.
Colonnes : Chaque colonne d'une table définit un attribut spécifique des données.
Chaque entrée (ligne) dans la table aura une valeur pour chaque colonne, représentant
les données réelles.
Lignes : Les lignes d'une table contiennent les données proprement dites. Chaque ligne
représente une instance d'une entité particulière.
Clé primaire : Une clé primaire est une ou plusieurs colonnes qui garantissent l'unicité
des lignes dans une table. Elle est utilisée pour identifier de manière unique chaque
enregistrement dans la table.
Clé étrangère : Une clé étrangère est une colonne (ou un ensemble de colonnes) qui
établit une relation entre deux tables. Elle pointe vers la clé primaire d'une autre table
et permet d'établir des relations entre les données dans les différentes tables.
Index : Un index est une structure de données utilisée pour accélérer la recherche dans
une table. Il améliore les performances en permettant un accès plus rapide aux données,
similaire à la façon dont un index dans un livre facilite la recherche de contenu
spécifique.
41
Requêtes SQL : PostgreSQL utilise le langage de requête structuré (SQL) pour
manipuler et interroger les données. Les requêtes SQL permettent de récupérer, insérer,
mettre à jour ou supprimer des données dans les tables.
42
4.2.2 Accéder à PostgreSQL
Pour se connecter sur notre serveur PostgreSQL on tape la commande suivante :
Pour accéder à PostgreSQL, vous pouvez utiliser l’interface de ligne de commande psql. Pour
lancer l’interpréteur de commandes psql, exécutez la commande suivante :
Ceci vous connectera en tant que superutilisateur de PostgreSQL (postgres) et vous donnera
accès à l’interface de ligne de commande de PostgreSQL.
Dans l’interface de ligne de commande de PostgreSQL, tapez la commande suivante pour créer
un nouveau rôle :
Pour accorder au nouveau rôle l’autorisation de créer des bases de données, tapez la commande
suivante :
43
4.2.4 Création d’une nouvelle base de données
Pour créer une nouvelle base de données dans PostgreSQL, tapez la commande suivante :
postgres=# \c banque;
La commande GRANT en SQL est utilisée pour accorder des privilèges (permissions) à des
utilisateurs ou des rôles sur des objets tels que des tables, des vues, des schémas, etc.
Cette commande accorde certains privilèges à l'utilisateur ou au rôle "nasry" sur la table
"client". Plus précisément, les privilèges accordés sont les suivants :
44
UPDATE : Permet à l'utilisateur "nasry" de mettre à jour les données existantes dans
la table "client".
DELETE : Permet à l'utilisateur "nasry" de supprimer des lignes de la table "client".
Cette commande accorde certains privilèges à l'utilisateur ou au rôle "nasry" sur une séquence
nommée "client_id_seq" :
GRANT : C'est le mot-clé qui indique que vous allez accorder des privilèges à un
utilisateur ou à un rôle.
USAGE : Ce privilège permet à l'utilisateur ou au rôle d'utiliser la séquence. En
accordant le privilège USAGE, vous autorisez "nasry" à utiliser cette séquence dans le
contexte de l'incrémentation des valeurs de séquence.
SELECT : Ce privilège permet à l'utilisateur ou au rôle d'exécuter une instruction
SELECT sur la séquence. Bien que les séquences soient principalement utilisées pour
générer des valeurs uniques, accorder le privilège SELECT permet à "nasry"
d'interroger la séquence pour obtenir sa valeur actuelle ou d'autres propriétés.
ON SEQUENCE client_id_seq : Cela spécifie la séquence sur laquelle les privilèges
sont accordés. Dans ce cas, il s'agit de la séquence nommée "client_id_seq".
TO nasry : C'est le destinataire des privilèges. Vous accordez les privilèges à
l'utilisateur ou au rôle "nasry".
Pour quitter l’interface de ligne de commande PostgreSQL, tapez \q et appuyez sur Entrée.
45
Création de notre répertoire pour mettre nos codes python :
root@nasry-ahamadi:/usr/lib/cgi-bin# cd cgipostegres/
<html>
<head>
<title>insertion</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
rel="stylesheet" integrity="sha384-
rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG
65" crossorigin="anonymous">
</head>
<body>
<div class="mb-3">
</div>
<div class="mb-3">
46
</div>
<div class="mb-3">
</div>
<div class="mb-3">
</div>
<div class="mb-3">
</div>
<div class="offset-5">
</div>
</form>
</body>
</html>
47
Voici notre code python qui permet d’ajouter un client :
#!/usr/bin/python3
import psycopg2
import cgi
import cgitb
def database():
curseur = conn.cursor()
48
def insertion(prenom, nom, code, numcompte, solde):
database()
val = (prenom,nom,code,numcompte,solde)
curseur.execute(req,val)
conn.commit()
print("Content-Type:text/plain")
print("")
print("Insertion réussie")
form = cgi.FieldStorage()
prenom = form.getvalue('prenom')
nom = form.getvalue('nom')
code = form.getvalue('code')
numcompte = form.getvalue('numcompte')
solde = form.getvalue('solde')
insertion(prenom,nom,code,numcompte,solde)
49
Attribution des droits d’exécution :
50
Voici notre formulaire html :
<html>
<head>
<title>insertion</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
rel="stylesheet" integrity="sha384-
rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG
65" crossorigin="anonymous">
</head>
<body>
<div class="mb-3">
</div>
<div class="mb-3">
51
<input type="text" name="solde" class="form-control">
</div>
<div class="offset-5">
</div>
</form>
</body>
</html>
Voici notre programme python qui permet de mettre à jour le solde d’un client :
#!/usr/bin/python3
import psycopg2
import cgi
52
import cgitb
def database():
curseur = conn.cursor()
def update(code,solde):
database()
val = (solde,code)
curseur.execute(req,val)
conn.commit()
print("Content-Type:text/plain")
print("")
print("Insertion réussie")
form = cgi.FieldStorage()
code = form.getvalue('code')
solde = form.getvalue('solde')
update(code,solde)
53
Attribution des droits d’exécution :
Avant modification :
Apres modification :
54
banque=# select * from client;
Voici notre code python qui permet d’afficher les clients qui se trouvent dans la base de
données sans l’utilisation du bootstrap:
#!/usr/bin/python3
import psycopg2
def database():
global conn,curseur
conn=psycopg2.connect(host="localhost",user="nasry",password="passer",dbname="banque
")
curseur=conn.cursor()
def affiche():
database()
curseur.execute(req)
print("Content-Type:text/html")
print("")
print("<body><table
border='1px'><tr><td>Prenom</td><td>Nom</td><td>Code</td><td>Numcompte</td><td
>Solde</td></tr>")
55
print(f"<tr><td>{row[1]}</td><td>{row[2]}</td><td>{row[3]}</td><td>{row[4]}</td><td
>{row[5]}</td></tr>")
print("</table></body>")
affiche()
http://localhost/cgi-bin/cgipostegres/affiche.py
Voici notre code python qui permet d’afficher les clients qui se trouvent dans la base de
données avec l’utilisation de bootstrap :
#!/usr/bin/python3
import psycopg2
def database():
curseur = conn.cursor()
56
def affiche():
database()
curseur.execute(req)
print("Content-Type:text/html")
print("")
print("<!DOCTYPE html>")
print("<html>")
print("<head>")
print("<title>Client Data</title>")
print('<link rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.2.3/css/bootstrap.min.css">')
print("</head>")
print("<body>")
print('<div class="container">')
print("<tr><td>Prenom</td><td>Nom</td><td>Code</td><td>Numcompte</td><td>Solde
</td></tr>")
print(f"<tr><td>{row[1]}</td><td>{row[2]}</td><td>{row[3]}</td><td>{row[4]}</td><td
>{row[5]}</td></tr>")
print("</table>")
print('</div>')
57
# Print the HTML footer
print("</body>")
print("</html>")
affiche()
http://localhost/cgi-bin/cgipostegres/affiche1.py
58
root@nasry-ahamadi:/var/www/html/python-cgi# nano suppression.html
<html>
<head>
<title>suppression</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/css/bootstrap.min.css"
rel="stylesheet" integrity="sha384-
rbsA2VBKQhggwzxH7pPCaAqO46MgnOM80zW1RWuH61DGLwZJEdK2Kadq2F9CUG
65" crossorigin="anonymous">
</head>
<body>
<div class="mb-3">
</div>
<div class="offset-5">
</div>
</form>
</body>
</html>
59
root@nasry-ahamadi:/usr/lib/cgi-bin/cgipostegres# vim suppression.py
#!/usr/bin/python3
import psycopg2
import cgi
import cgitb
def database():
curseur = conn.cursor()
def suppression(code):
database()
60
val = (code)
curseur.execute(req,val)
conn.commit()
print("Content-Type:text/plain")
print("")
print("Suppression réussie")
form = cgi.FieldStorage()
code = form.getvalue('code')
suppression(code)
http://localhost/python-cgi/suppression.html
61
Avant suppression :
Apres suppression :
62
4.3.2 Utilisation de GET
root@nasry-ahamadi:/usr/lib/cgi-bin/cgipostegres# curl -X GET "http://localhost/cgi-
bin/cgipostegres/affiche.py"
63
Avant suppression :
Apres suppression :
Avec pgAdmin, vous pouvez gérer les serveurs de bases de données PostgreSQL.
Pour installer PgAdmin4, vous devez ajouter le dépôt de la dernière version de PgAdmin4 à
votre système. Pour ce faire, entrez les commandes suivantes dans votre terminal :
64
Enfin, mettez à jour les listes de packages.
root@nasry-ahamadi:~# /usr/pgadmin4/bin/setup-web.sh
Cela vous demandera de saisir l'adresse e-mail de l'utilisateur pgadmin4 et de définir le mot de
passe, Acceptez aussi la configuration du serveur Web Apache en mettant y et y comme vous
le voyais sur l’image en haut:
65
Après l’installation, vous pouvez accéder à PgAdmin4 en ouvrant votre navigateur web et en
entrant l’URL suivante :
http://localhost/pgadmin4/
Sur la première page de pgAdmin, ajoutez un serveur PostgreSQL à administrer avec pgAdmin
en cliquant sur "Ajouter un nouveau serveur". Cela peut être un serveur PostgreSQL local ou
distant.
66
Dans la section "Général", donnez un nom et une description au serveur.
Sous l'onglet "Connexion", fournissez les détails d'accès - hôte de base de données,
utilisateur de base de données et mot de passe.
67
Une fois terminé, cliquez sur le bouton Enregistrer pour enregistrer les configurations. Si
vous avez réussi à ajouter le serveur, le nom apparaîtra dans la barre latérale gauche.
68
69
70
71
72
73