Académique Documents
Professionnel Documents
Culture Documents
1. Installer Django 3
1. Pré-requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1. Installer Django sous Raspberry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Installer Django sous Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1. Pré-requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2. Installation de pip, installateur de bibliothèque Python. Indispensable. . . . . . . . . . . . . . . . . . . 3
3. Installer WAMP, MAMP, ou LAMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
3. Préfixe de ligne de commande Raspberry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
4. Préfixe de ligne de commande Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1
5. Créer une autre page avec le même template 17
1. La fonction list_themes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1. procédure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2. L’url de direction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1. procédure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3. Le premier template : list.html . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
4. Créer un lien hypertexte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
6. Le backend Django 19
2
Fiche 1. Internet
Installer Django
Pré-requis
Pour installer des modules Python, l’utilitaire pip est primordial. C’est par pip que toutes les bibliothèques Python sont
installer. Raspberry Pi et NOOBS intègre nativement pip. Pour Windows, il faut un peu plus travailler...
C:\User\philippe\
λ curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
C:\User\philippe\
λ python get-pip.py
Remarque
Selon la version de python, on tape la ligne de commande python get-pip.py ou py get-pip.py ou python3
get-pip.py
Sous la Windows OS, il faudra peut-être modifier le chemin des variables pour que python puisse être appelé de n’importe
quel emplacement de votre ordinateur. Cependant depuis la version Python 3.6, lors de l’installation, Python demande le
chemin des variables. Restez attentif ! ! !
https://www.uwamp.com/fr/?page=download
UwAmp transforme votre ordinateur en serveur Apache. Il intègre phpmyadmin et MySQL pour la gestion des bases de
données.
3
Notation
Le site internet doit se placer dans le dossier UwAmp/www/
Remarque
J’ai choisi mon second disque dur D pour installer UwAmp. Et je l’ai placé à sa racine. C’est pourquoi, on lira : D :
UwAmp/www/
Notation
Dans la suite de ce tutoriel, les lignes commandes sont identiques que l’on soit sous Windows ou sous Raspberry.
Ce qui va changer ce sont les endroit d’appel. Voir les exemples ci-dessous.
pi@raspberrypi: $
D:\uwamp\www
4
Fiche 2. Internet
Attention
Il faut se placer dans le répertoire qui va contenir les sites Web.
Raspberry Windows
Remarque
cd nom-du-fichier pour change directory nom-du-fichier, ce qui va ouvrir le nom-du-fichier souhaité. A parit de
maintenant, une des deux ligne de commande sera favorisée. Parfois Raspberry, parfois Windows.
Démarrer le projet
le dossier snt
Remarque
Django possède une base de données native : flask. Pour des raisons de commodité et de culture numérique, MySQL
est utilisée ici.
5
L’installation de phpmyadmin a été traitée précédemment.
Si vous souhaitez utiliser une base Mysql, remplacer les ligne ci-dessous
par
Coté MySQL
1. Ouvrir PHPMyAdmin, par défaut l’utilisateur est root avec le mot de passe root ou vide, selon vos choix lors de la
création.
Pour créer les tables dans votre code Python il faut taper dans la console de commande la ligne en blanc.
6
Notation
Bien distinguer la commande python3 ou py !
on peut lire qu’il faut lancer le navigateur sur l’adresse http ://127.0.0.1 :8000
A retenir Raspberry
7
Préparer les tables
Lancer le serveur
D:\UwAmp\www\snt
λ py manage.py makemigrations
A retenir Windows
Créer les tables dans la base
D:\UwAmp\www\snt
λ py manage.py migrate
Lancer le serveur
D:\UwAmp\www\snt
λ py manage.py runserver
Linux ou Windows
Avec Linux ou Mac Os, les commandes sont appelées par python3 manage.py ....
Avec Windows, les commandes sont appelées par py manage.py ....
8
Fiche 3. Les premières pages
Création de l’application
On souhaite créer l’application activity.
Attendre 5 secondes pour avoir
D:\UwAmp\www\snt
D:\UwAmp\www\snt
λ py manage.py startapp activity
λ
Et ? ? ? c’est tout ! ! ! Le module est créé mais il est vide. Allons voir ce qu’il s’est passé dans le dossier D:\UwAmp\www\snt
D:\UwAmp\www\snt ou \var\www\html\snt
9
Déclarer son application dans le dossier snt
Votre application n’existe pas dans votre projet. Il faut aller dans D:\UwAmp\www\snt\snt\settings.py pour la déclarer.
1. models.py
Le fichier modèle va permettre de créer la table MySQL qui correspond à l’objet à créer. Par exemple, une activité est
définie par :
un titre
une explication
une case pour la publication ou pas
soit reliée à un thème
Voici ce que cela donne
10
Et oui, on utilise des classes donc des objets !
Remarque
Les lignes 5 et 6 et 17 et 18 permettent de définition l’objet par une chaine de caractère. C’est à dire quand l’objet
sera appelé, il s’affichera avec cet attribut. Le thème est dénommé par son nom (name), l’article par son titre (title).
Remarque
J’ai créé le modèle Thème avant de l’utiliser. Je rattache donc ce modèle à mon application activity. J’aurai pu
faire un autre choix. Du coup, les tables vont se nommer : activity_article et activity_Theme.
D:\UwAmp\www\snt
λ py manage.py makemigrations
D:\UwAmp\www\snt
λ py manage.py migrate
Ça semble bien ! ! Passons au fichier views.py qui propulse les pages html en leur indiquant les composantes à afficher.
11
2. views.py
Le fichier views.py construit la page. C’est dans ce fichier qu’on crée les fonctions qui réalisent les pages associés à
l’application activity. On construit la fonction qui va afficher la page listant les articles. Cette fonction est appelée
list_articles.
Décryptage
3. urls.py
Pour créer et appeler une url, on utilise la fonction path ou la fonction re_path selon la chaine de caractères de l’url.
Ces fonctions sont importées du module django.urls. (voir ligne 1 ci-dessous). Elles attendent 3 paramètres.
1. le premier paramètre est une partie de l’url, qui décrit l’action à faire.
2. le deuxième est la fonction à appeler dans fichier views.py
3. le troisième est le nom d’appel de cet url. Lorsque je crée un lien hypertexte ou une redirection, c’est le nom que à
utiliser.
Dans le fichier urls.py.
La ligne 2 ci-dessus importe toutes les fonctions du fichier views.py qui se trouve dans le même dossier.
Le ligne 5 est donc l’appel à la fonction path, on voit bien les 3 paramètres. Le premier paramètres est la chaine de ca-
ractères vide, ’ ’. Souvenons nous comment sont appeler les urls de ce dossier : Via le fichier urls.py dans le dossier snt.
C’est le gestionnaire de toutes les urls du projet. Pour rappel :
C’est a dire que toutes les url qui vont commencer par activity/ seront redirigées vers le fichier des urls de l’application
activity. Le fait de laisser vide l’url en ligne 5 signifie que l’adresse activity/ pointera vers la page qui liste les articles.
12
Relançons le serveur
D:\UwAmp\www\snt
λ py manage.py runserver
Ça semble bien....
Ouais, pas clair ! ! En fait il est écrit que le nom activit n’est pas connu. Normal, on aurait du écrire activity.
Où se situe l’erreur ?
13
Et voilà, nous y sommes presque. Le navigateur renvoie une erreur mais c’est normal. A aucun moment, nous n’avons créé
un template. C’est à dire une page HTML pour visualiser sur notre navigateur les données souhaitées.
5. −→ retour visiteur et affichage de la page 4. le template est alors appelé et ses attributs sont placés
5. le visiteur voit la page
14
Fiche 4. Le Web
L’emplacement du template
Dans le fichier snt/settings.py, il faut rajouter un chemin qui permet au projet de savoir où sont stockés les templates.
Deux stratégies sont possibles.
• Regrouper tous les templates du projet ensemble mais dans des dossiers différents.
• Regrouper les templates par application
.
C’est dans DIRS qu’il faut faire ce choix, comme ci-dessous, en ligne 61.
Déclaration de l’emplacement des templates (une seule fois pour tout le site).
procédure
Remarque
Le dossier templates contiendra tous les templates de votre projet.
1. <!DOCTYPE html>
2. <html lang="fr">
3. <head>
4. <meta charset="utf-8">
15
5. <meta name="description" content="">
6. <meta name="author" content="">
7. </head>
8. <body>
9. <section class=’content’>
10. <h1>Liste des articles</h1>
11. <ul>
12. {% for article in articles %}
13. <li>{{ article.title }}</li>
14. {% endfor %}
15. </ul>
16. </section>
17.</body>
18.</html>
La partie entre les balises <head> et </head> ne s’affichent pas dans le navigateur. Ce sont les métadonnées de la page.
1. <!DOCTYPE html> ouvre le type de document : html
2. <html lang="fr"> donne la langue du document et donc l’encryptage des caractères.
3. <head> est une balise ouvrante qui ouvre une partie pour écrire les métadonnées de la page.
4. <meta charset="utf-8"> est l’encodage des caractères, qui doit correspondre avec l’encodage de la base de données
le as échéant.
5. <meta name="description" content="Liste des articles"> signale la description de la page.
6. <meta name="author" content="C’est moi !"> renseigne l’auteur de la page.
7. </head balise fermante.
8. <body> balise ouvrante du corps de la page. A partir de cette balise, le code est interprété par le navigateur.
9. <section class=’content’> crée une section dans la page
10. <h1>Liste des articles</h1> Les balise h1, h2, h3, ... h6 sont des balises de titres.
11. <ul> La balise <ul> ouvre une liste non ordonnée.
12. {% for article in articles %}
13. <li> article.title </li> Cette balise <li> écrit un item de la liste.
14. {% endfor %}
15. </ul>
16. </section>
17. </body>
18. </html>
Les lignes 12 et 14 sont une particularité de Django. Il est possible de faire de l’algorithmique dans une page html lorsqu’on
utilise Django. Ici, la balise <li> et son contenu vont être répété.e.s tant qu’il y a des articles dans la variable articles.
La variable articles est une liste de plusieurs dictionnaires, appelé par Python un Queryset car il émane d’une réponse
à une requête Mysql.
16
Fiche 5. Le Web
Dans cette partie, on va créer un autre page avec le même template. On modifiera deux lignes pour plus de lisibilité mais
on pourrait garder la même page exactement. La page que nous souhaitons créer doit afficher la liste des thèmes.
Pour cela, il faut :
1. le modèle Theme. Ca tombe bien, nous l’avons ! Il est dans le fichier activity\models.py
2. la fonction list_themes qui va propulser le template. Il faut la créer !
3. l’url de direction. Il faut la créer !
4. le template... On vient de dire que nous l’avions. Et oui ! Car afficher une liste d’articles ou une liste de thèmes, c’est
toujours une liste. Il faudra juste changer articles par themes dans le template.
Commençons !
La fonction list_themes
Comme on a le modèle, on ne va pas le créer !
Nous n’avons pas la fonction list_themes, mais on a la fonction list_articles.
procédure
L’url de direction.
procédure
1. <!DOCTYPE html>
2. <html lang="fr">
3. <head>
4. <meta charset="utf-8">
5. <meta name="description" content="">
6. <meta name="author" content="">
7. </head>
8. <body>
9. <section class=’content’>
10. <h1>Liste des articles</h1>
11. <ul>
17
12. {% for theme in themes %}
13. <li>{{ theme.name }}</li>
14. {% endfor %}
15. </ul>
16. </section>
17.</body>
18.</html>
En ligne 13, on remplace article.title par theme.name car dans le modèle Theme du fichier activity\models.py, name
n’existe pas, mais on a déclaré l’attribut name
1. <!DOCTYPE html>
2. <html lang="fr">
3. <head>
4. <meta charset="utf-8">
5. <meta name="description" content="">
6. <meta name="author" content="">
7. </head>
8. <body>
9. <section class=’content’>
10. <h1>Liste des articles</h1>
11. <ul>
12. {% for theme in themes %}
13. <li>{{ theme.name }}</li>
14. {% endfor %}
15. </ul>
16. <a href="{% url ’list_themes’ %}">Vers les thèmes</a>
17. </section>
18.</body>
19.</html>
Notation
Lorsque l’on crée un lien, on utilise la balise <a>
Pour appeler le lien, on utilise le nom de l’url.
Remarque
A ce stade, on peut s’apercevoir d’au moins deux points :
1. Les liste des thèmes et des articles sont vides. Normal, rien n’a été enregistré. Il faut donc créer une partie
administrateur appelée backend. Et ça Django s’en est occupé pour nous.
2. La page est assez moche avec un design nul ou presque.
Et voici donc les deux prochaines fiches à venir...
18
Fiche 6. Les premières pages
Le backend Django
Ce qu’il y a de génial avec Django c’est que toutes les taches de backend sont prises en charge. Pour commencer, il faut
créer un super utilisateur. Allons dans la console :
Pour tester :
pi@raspberrypi: /var/www/html/snt/ $ python manage.py runserver
1.
Incroyable, le back end est déjà prêt ! ! ! Il ne reste plus qu’à se loger avec vos identifiants donnés plus haut.
3. Et voilà...
19
Il vous reste à rajouter dans le fichier admin.py la ligne admin.site.register(Theme)
Vous pouvez maintenant ajouter des articles, des utilisateurs, les supprimer, les modifier. Une fois les thèmes et articles
ajoutés, taper dans la barre url du navigateur http://127.0.0.1:8000/activity/ et visualiser vos articles.
20
Fiche 7. Données structurées - Web
Notation
Les feuilles de style font partie de la partie CSS : Cascade Style Sheets, littéralement les feuilles de style en cascade.
Leur extension est .css.
h1 {
font-size:2em;
border-bottom: 1px solid #00819F;
margin-bottom: 20px;
color:#00819F;
}
.content{
background-color: #FFF;
margin-left: 0px;
margin-top: 20px;
margin-right: 0px;
background-color: rgba(255, 255, 255, 0.5);
padding : 15px;
}
On peut écrire ce bout de code dans la page list.html dans la balise <head> et dans une balise <style>
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="description" content="">
<meta name="author" content="">
<style>
section {
margin-left: 0px;
margin-top: 20px;
margin-right: 0px;
}
ul {
margin-left: 0px;
}
h1 {
font-size:2em;
border-bottom: 1px solid #00819F;
21
margin-bottom: 20px;
color:#00819F;
}
.content{
background-color: #FFF;
margin-left: 0px;
margin-top: 20px;
margin-right: 0px;
background-color: rgba(255, 255, 255, 0.5);
padding : 15px;
}
.sanspuce{
list-style-type:none;
}
</style>
</head>
<body>
<section class="content">
<h1>Liste des articles</h1>
<ul>
{% for theme in themes %}
<li class="sanspuce">{{ theme.name }}</li>
{% endfor %}
</ul>
</section>
</body>
</html>
Notation
Mais pourquoi en cascade ? car elles héritent des feuilles de styles qui sont définies précédemment.
Remarque
Les feuilles de style font partie de la partie CSS : Cascade Style Sheets, littéralement les feuilles de style en cascade.
Pourquoi en cascade, car elles héritent des feuilles de styles qui sont définies précédemment, et surtout, elle peuvent
surcharger des commendes déjà définies.
Exemple
Supposons que 3 feuilles de styles sont définies dans un document : A.css, B.css et C.css. Leur ordre de définition
est important.
Supposons que dans le fichier A.css, on déclare la classe .titre et que dans C.css on déclare aussi la classe
.titre mais d’une autre manière, comme C.css vient après A.css, c’est le style de C.css qui décore la page.
22