Valid XHTML     Valid CSS2    

Listing du fichier tp4.php

 

00001     <?php
00002     
# # (gH) -_- tp4.php ; TimeStamp (unix) : 24 Juin 2018 vers 20:54
00003     
error_reporting(E_ALL | E_NOTICE | E_STRICT ) ;
00004     
header
('Content-Type "text/html; charset=iso-8859-1"') ;
00005     
ini_set
( 'default_charset', 'ISO-8859-1' );
00006     include(
"decra-inc.php") ;
00007     
00008     
$R
= ghRouge("R") ;
00009     
$XML
= ghRouge("XML") ;
00010     
$Awk
= ghRouge("AWK") ;
00011     
$Php
= ghVert("PHP") ;
00012     
$python
= ghVert("Python") ;
00013     
00014     
$numSerie
= 4 ;
00015     
debutTP
($numSerie,"MVC en $python via Django") ;
00016     
ghAtAngers() ;
00017     
00018     
## -------------------------------------------------------------------------------------------
00019     
00020     
sdl
(3) ; echo cmt(' pour afficher toutes les solutions : tp1.php?solutions=1') ; sdl(3) ;
00021     
00022     
## -------------------------------------------------------------------------------------------
00023     
00024     
p
("texte") ;
00025     echo
"" ;
00026     
finp() ;
00027     
debutSection() ;
00028     
00029     
$tableauDesRubriques = array() ;
00030     
$idr
= 0 ;
00031     
$idr
++; $tableauDesRubriques[$idr] = "Installation et test de Django (première partie)" ;
00032     
$idr
++; $tableauDesRubriques[$idr] = "Deuxième partie : base de données" ;
00033     
$idr
++; $tableauDesRubriques[$idr] = "Les vues (troisième partie)" ;
00034     
$idr
++; $tableauDesRubriques[$idr] = "Les formulaires (partie quatre)" ;
00035     
$idr
++; $tableauDesRubriques[$idr] = "Les tests (partie cinq) et la fin du tutoriel" ;
00036     
$idr
++; $tableauDesRubriques[$idr] = "Une application plus complète entièrement en français" ;
00037     
$tdmCRLM
= new tdm($tableauDesRubriques) ;
00038     
$tdmCRLM
->titre() ;
00039     
$tdmCRLM
->menu("oui","oui","nou") ;
00040     
00041     
direAfficherSolutionsTP
($numSerie) ;
00042     
00043     
pvide() ;
00044     
00045     
p
("texte gvertf") ;
00046     echo
" On se propose ici de reproduire le début du tutoriel de Django, " ;
00047     echo
" en version anglaise "
.href("https://docs.djangoproject.com/en/2.1/intro/tutorial01/","ici") ;
00048     echo
" et en version française "
.href("https://docs.djangoproject.com/fr/2.1/intro/tutorial01/","là").". " ;
00049     
finp() ;
00050     
00051     
p
("texte gvertf") ;
00052     echo
" Toutes les manipulations sont à faire dans un terminal, avec un éditeur de textes comme Geany ou Gedit." ;
00053     
finp() ;
00054     
00055     
finSection() ;
00056     
00057     
$numExo
= 0 ;
00058     
00059     
## -------------------------------------------------------------------------------------------
00060     
00061     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Installation et test de Django (première partie)
00062     
00063     ## -------------------------------------------------------------------------------------------
00064     
00065     
blockquote
() ; # tp
00066     
00067     
blockquote
() ; # énoncé
00068     
00069     
p
('texte') ;
00070     echo
" Quels sont les deux sites les plus connus qui utilisent "
.ghVert("Django")."&nbsp;?" ;
00071     
finp() ;
00072     
00073     
p
("texte") ;
00074     echo
"Dans un terminal, taper "
.b("pip3 install django==2.1")."." ;
00075     
finp() ;
00076     
00077     
p
("texte") ;
00078     echo
"Attendre que le système ait fini de télécharger et de décompresser l'archive pytz avant de continuer." ;
00079     
finp() ;
00080     
00081     
pre_fichier
("install-django.txt","cadre") ;
00082     
00083     
p
("texte") ;
00084     echo
"Que répond le système si on exécute "
.b("python -m django --version")."&nbsp;?" ;
00085     
finp() ;
00086     
00087     
p
("texte") ;
00088     echo
"Ecrire l'alias suivant&nbsp;:" ;
00089     
finp() ;
00090     
00091     
pre_fichier
("django-alias1.txt","cadre") ;
00092     
00093     
p
("texte") ;
00094     echo
"Si le fichier "
.b("~/.local/bin/django-admin")." existe, écrire l'alias suivant&nbsp;:" ;
00095     
finp() ;
00096     
00097     
pre_fichier
("django-alias2.txt","cadre") ;
00098     
00099     
p
("texte") ;
00100     echo
"Que répond désormais le système si on exécute "
.b("python -m django --version")."&nbsp;?" ;
00101     
finp() ;
00102     
00103     
p
("texte") ;
00104     echo
ghVert
(" Lire le début du tutoriel partie 1, jusqu'à ").b("python manage.py runserver")."." ;
00105     
finp() ;
00106     
00107     
p
("texte") ;
00108     echo
" Commencer par créer un répertoire MVC-Django. " ;
00109     echo
" Si, dans ce répertoire on exécute la commande "
.b("django-admin startproject mysite") ;
00110     echo
" combien de fichiers et de répertoires sont créés&nbsp;?" ;
00111     echo
" Quelles commandes Unix le prouvent&nbsp;? Mettre dans "
.b("liste1.txt")." la liste de tous les fichiers avec leur chemin d'accès relatif." ;
00112     
finp() ;
00113     
00114     
p
("texte") ;
00115     echo
"Vérifier que, dans le répertoire mysite, la commande "
.b("python manage.py runserver")." lance bien le serveur. " ;
00116     echo
" A quelle URL est-il accessible&nbsp;?" ;
00117     echo
" Qu'affiche la page Web&nbsp;?" ;
00118     echo
" Qu'affiche le terminal si on ouvre la page d'index du serveur&nbsp;?" ;
00119     
finp() ;
00120     
00121     
p
("texte") ;
00122     echo
"Quels fichiers sont créés si on exécute, dans le répertoire mysite, la commande " ;
00123     echo
b
("python manage.py startapp polls")."&nbsp;?" ;
00124     echo
" Essayer de sauvegarder la liste des fichiers dans le fichier "
.b("liste2.txt")." et " ;
00125     echo
" comparer avec "
.b("liste1.txt").". " ;
00126     
finp() ;
00127     
00128     
p
("texte") ;
00129     echo
" Pourquoi faut-il exécuter "
.b("python manage.py migrate")."&nbsp;?" ;
00130     
finp() ;
00131     
00132     
p
("texte") ;
00133     echo
ghVert
("Lire la suite du tutoriel et recopier ce qui est mis dans le tutoriel pour l'écriture de la première vue").". " ;
00134     echo
" Peut-on avoir comme texte "
.b("Bonjour à tout le monde")." au lieu de ".b("Hello, world") ;
00135     echo
" avec prise en compte de l'accent sur le a&nbsp;?" ;
00136     
finp() ;
00137     
00138     
p
("texte") ;
00139     echo
" Le code produit pour la page d'index est-il valide au sens de la grammaire XHTML 1.0 Strict&nbsp;?" ;
00140     echo
" Serait-ce difficile de le modifier pour qu'il le soit&nbsp;?" ;
00141     echo
" Est-ce simple de changer l'image affichée (la fusée)&nbsp;?" ;
00142     
finp() ;
00143     
00144     
p
("texte") ;
00145     echo
"Quelle erreur y a-t-il dans le tutoriel Django partie 1&nbsp;?" ;
00146     
finp() ;
00147     
00148     
p
("texte") ;
00149     echo
" Quelle commande aurait-il fallu exécuter pour installer "
.b("Django&nbsp;2.0") ;
00150     echo
" au lieu de "
.b("Django&nbsp;2.1")."&nbsp;?" ;
00151     
finp() ;
00152     
00153     
p
("texte") ;
00154      echo
ghRouge
("Si l'installation ne fonctionne pas").", vous pouvez toujours regarder la série de vidéos " ;
00155      echo
href
("https://www.youtube.com/watch?v=LxEFgfPdhDg","Tutoriel Django Français")." ou la série " ;
00156      echo
href
("https://www.youtube.com/watch?v=UmljXZIypDc","Python Django Tutorial English").". " ;
00157     
finp() ;
00158     
00159     
finblockquote
() ; # énoncé
00160     
00161     
solutionTP
($numExo,$numSerie) ;
00162     
00163     
p
("texte") ;
00164     echo
" Les deux sites les plus connus qui utilisent "
.ghVert("Django")." sont sans doute " ;
00165     echo
b
("Instagram")." et ".b("Mozilla").". Pour d'autres sites basés sur ".ghVert("Django").", " ;
00166     echo
" consulter par exemple "
.href('https://www.netguru.co/blog/top-10-django-apps-and-why-companies-are-betting-on-this-framework',"top-10-django-apps")."." ;
00167     
finp() ;
00168     
00169     
p
("texte") ;
00170     echo
em
("A priori")." la commande ".b("python -m django --version") ;
00171     echo
" affiche "
.ghBleu("/usr/bin/python: No module named django ") ;
00172     echo
" parce que "
.b("python")." correspond à python 2. " ;
00173     echo
" Une fois les alias définis, ou à l'aide de la commande "
.b("python3 -m django --version") ;
00174     echo
" donc avec un 3 au bout de python, on voit le numéro de version de django installé. Ce doit sans doute &ecirc;tre " ;
00175     echo
b
("2.1.3")." ou ".b("2.2.7").". " ;
00176     
finp() ;
00177     
00178     
p
("texte") ;
00179     echo
"Pour connaitre " ;
00180     echo
" le nombre de fichiers et de répertoires créés suite " ;
00181     echo
" à la commande "
.b("django-admin startproject mysite") ;
00182     echo
" on peut, sous Unix, utiliser des commandes comme "
.ghRouge("ls -altR")." ou ".ghRouge("find .").". " ;
00183     echo
" Si on dispose de la commande "
.href("https://linux.die.net/man/1/tree","tree").", " ;
00184     echo
" on peut se contenter de taper "
.ghRouge("tree")." et obtenir : " ;
00185     
finp() ;
00186     
00187     
pre_fichier
("tree.txt","cadrejaune") ;
00188     
00189     
p
("texte") ;
00190     echo
"Pour enregistrer la liste des fichiers, la commande " ;
00191     echo
" "
.ghRouge("find . > liste1.txt").". " ;
00192     echo
" est sans doute la plus adaptée. " ;
00193     echo
" Voici ce que contient alors "
. href("liste1.txt")."&nbsp;: " ;
00194     
finp() ;
00195     
00196     
pre_fichier
("liste1.txt","cadrebleu") ;
00197     
00198     
p
("texte") ;
00199     echo
" Le serveur est en principe à l'adresse " ;
00200     echo
href
(" http://127.0.0.1:8000/")." comme indiqué dans le tuteur et dans le terminal. " ;
00201     
finp() ;
00202     
00203     
pre_fichier
("django1.txt","cadrejaune") ;
00204     
00205     
p
("texte") ;
00206     echo
" La page Web affichée correspond à&nbsp;:" ;
00207     
finp() ;
00208     
00209     
p() ;
00210     
$img
= "django1.png" ;
00211     
nbsp
(7) ;
00212     echo
href
($img,img($img,"",600)) ;
00213     
finp() ;
00214     
00215     
p
("texte") ;
00216     echo
" L'ouverture de la page d'index affiche dans le terminal qui a lancé le serveur " ;
00217     echo
" le texte suivant&nbsp;:" ;
00218     
finp() ;
00219     
00220     
pre_fichier
("django2.txt","cadrebleu") ;
00221     
00222     
p
("texte") ;
00223     echo
" Une fois la commande "
.b("python manage.py startapp polls")." on dispose de nouveaux fichiers. " ;
00224     echo
" Pour savoir lesquels, le mieux est sans doute d'enregistrer la liste des fichiers et d'utiliser " ;
00225     echo
href
("https://sourceforge.net/projects/tkdiff/","tkdiff") ;
00226     echo
" pour comparer les deux listes de fichiers comme suit&nbsp;:" ;
00227     echo
" "
.ghRouge("find . > liste2.txt ; tkdiff liste1.txt liste2.txt &amp;").". " ;
00228     echo
" Voici ce que l'on voit alors&nbsp;: " ;
00229     
finp() ;
00230     
00231     
p() ;
00232     
$img
= "django2.png" ;
00233     
nbsp
(7) ;
00234     echo
href
($img,img($img,"",600)) ;
00235     
finp() ;
00236     
00237     
00238     
p
("texte") ;
00239     echo
"Il est très simple d'afficher la page de départ des sondages en français comme ci-dessous" ;
00240     
finp() ;
00241     
00242     
p() ;
00243     
$img
= "django3.png" ;
00244     
nbsp
(7) ;
00245     echo
href
($img,img($img,"",600)) ;
00246     
finp() ;
00247     
00248     
00249     
p
("texte") ;
00250     echo
"parce qu'il suffit de modifier la fonction "
.b("index") ;
00251     echo
" du fichier "
.ghVert("polls/views.py")." et d'y mettre le texte en français." ;
00252     
finp() ;
00253     
00254     
00255     
p
("texte") ;
00256     echo
" Le code HTML n'est pas valide au sens de la grammaire XHTML 1.0 strict " ;
00257     echo
" parce qu'il s'agit de code HTML 5 avec du CSS externe et interne, du SVG inline... " ;
00258     echo
" Ce serait sans doute difficile à modifer parce qu'il ne semble pas y avoir de fichier " ;
00259     echo
" index.html dans les fichiers créés." ;
00260     echo
" La m&ecirc;me remarque s'applique à l'image de la fusée par ce que c'est du SVG inline et pas un " ;
00261     echo
" un fichier image inclus." ;
00262     
finp() ;
00263     
00264     
p
("texte") ;
00265     echo
" L'erreur dans le tutoriel Django "
.b("partie 1") ;
00266     echo
" se situe dans la rubrique "
.ghBleu("L'étape suivante est de faire pointer la configuration d'URL...") ;
00267     echo
" parce que le texte dit de modifier "
.ghRouge("mysite/urls.py") ;
00268     echo
" alors que l'encadré fait référence à "
.ghVert("monsite.urls.py") ;
00269     echo
" donc avec "
.b("monsite")." au lieu de ".b("mysite")." comme nom de répertoire." ;
00270     
finp() ;
00271     
00272     
p
("texte") ;
00273     echo
" Pour installer "
.b("Django&nbsp;2.0") ;
00274     echo
" au lieu de "
.b("Django&nbsp;2.1")." il faut écrire " ;
00275     echo
ghVert
("pip3 install Django==2.0").". " ;
00276     
finp() ;
00277     
00278     
finsolution
() ; # contient un blockquote
00279     
00280     
finblockquote
() ; # tp
00281     
00282     ## -------------------------------------------------------------------------------------------
00283     
00284     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Deuxième partie : base de données
00285     
00286     ## -------------------------------------------------------------------------------------------
00287     
00288     
blockquote
() ; # tp
00289     
00290     
blockquote
() ; # énoncé
00291     
00292     
p
("texte") ;
00293     echo
" Suivre ce qui est indiqué dans la " ;
00294     echo
href
("https://docs.djangoproject.com/fr/2.1/intro/tutorial02/","deuxième partie") ;
00295     echo
" du tutoriel. On utilisera sqlite3 comme moteur de base de données avec " ;
00296     echo
b
("db.sqlite3")." comme nom de la base de données." ;
00297     
finp() ;
00298     
00299     
p
("texte") ;
00300     echo
"Quels fichiers sont créés suite à la commande " ;
00301     echo
b
("python manage.py makemigrations polls")."&nbsp;?" ;
00302     echo
" Essayer de sauvegarder la liste de tous les fichiers dans le fichier "
.b("liste4.txt").". " ;
00303     echo
" Comment comparer "
.b("liste2.txt")." de la question précédente et ".b("liste4.txt")."&nbsp;? " ;
00304     
finp() ;
00305     
00306     
00307     
p
("texte") ;
00308     echo
" Dans la section " ;
00309     echo
b
("Jouer avec l'interface de programmation (API)").", " ;
00310     echo
" essayer de mettre comme question "
.b("Est-ce que tout va bien&nbsp;?") ;
00311     echo
" en plus de "
.b("What's new?").". " ;
00312     
finp() ;
00313     
00314     
p
("texte") ;
00315     echo
" Dans la section " ;
00316     echo
b
("Création d'un utilisateur administrateur").", " ;
00317     echo
" essayer d'ajouter un utilisateur nommé "
.b("tintin").". " ;
00318     
finp() ;
00319     
00320     
00321     
p
("texte") ;
00322     echo
" Comment dans le terminal lister la structure de toutes les tables SQL créées " ;
00323     echo
" en mode interactif avec sqlite3&nbsp;?" ;
00324     echo
" Et comment afficher tous " ;
00325     echo
" les utilisateurs en mode interactif avec sqlite3&nbsp;?" ;
00326     echo
" Et par programme, avec redirection du résultat dans "
.b("listeUtilisateurs.txt")." ou dans ".b("liste3.txt")."&nbsp;?" ;
00327     
finp() ;
00328     
00329     
p
("texte") ;
00330     echo
" Qu'est-ce qui ne fonctionne pas dans cette partie du tutoriel dans les salles " ;
00331     echo
" du département informatique&nbsp;?" ;
00332     
finp() ;
00333     
00334     
finblockquote
() ; # énoncé
00335     
00336     
solutionTP
($numExo,$numSerie) ; # contient un blockquote
00337     
00338     
p
("texte") ;
00339     echo
" A la suite de la commande " ;
00340     echo
b
("python manage.py makemigrations polls")."&nbsp;?" ;
00341     echo
" on peut voir les fichiers sont créés comme à la question précédente par " ;
00342     echo
" "
.ghRouge("find . > liste4.txt ; tkdiff liste1.txt liste4.txt &amp;").". " ;
00343     echo
" Voici ce que l'on voit alors&nbsp;: " ;
00344     
finp() ;
00345     
00346     
p() ;
00347     
$img
= "tkdiff2.png" ;
00348     
nbsp
(7) ;
00349     echo
href
($img,img($img,"",600)) ;
00350     
finp() ;
00351     
00352     
p
("texte") ;
00353     echo
" Pour mettre comme question "
.b("Est-ce que tout va bien&nbsp;?") ;
00354     echo
" en plus de "
.b("What's new?").", il suffit dans le shell de l'API d'écrire" ;
00355     
finp() ;
00356     
00357     
pre_fichier
("djangoShell.txt","cadrebleu") ;
00358     
00359     
p
("texte") ;
00360     echo
" Pour ajouter un utilisateur nommé "
.b("tintin").", on peut utiliser le bouton + de la zone " ;
00361     echo
" Add dans le panneau d'administration du site. " ;
00362     
finp() ;
00363     
00364     
#pre_fichier("django3.txt","cadrebleu") ;
00365     
00366     
p() ;
00367     
$img
= "addUser.png" ;
00368     
nbsp
(7) ;
00369     echo
href
($img,img($img,"",600)) ;
00370     
finp() ;
00371     
00372     
p
("texte") ;
00373     echo
" Dans le terminal, pour consulter la structure de toutes les tables créées, " ;
00374     echo
" il faut écrire " ;
00375     
finp() ;
00376     
00377     
pre_fichier
("schema.txt","cadrebleu") ;
00378     
00379     
p
("texte") ;
00380     echo
" Et pour lister les utilisateurs en mode interactif avec sqlite3 " ;
00381     echo
" on peut se contenter de " ;
00382     
finp() ;
00383     
00384     
pre_fichier
("django4.txt","cadrebleu") ;
00385     
00386     
p
("texte") ;
00387     echo
" Le programme associé " ;
00388     echo
" doit ressembler au code ci-dessous, fichier "
.href("users.sql3")."&nbsp;:" ;
00389     
finp() ;
00390     
00391     
pre_fichier
("django5.txt","cadrebleu") ;
00392     
00393     
p
("texte") ;
00394     echo
"Voici comment l'utiliser pour la redirection du résultat dans "
.b("listeUtilisateurs.txt") ;
00395     
finp() ;
00396     
00397     
pre_fichier
("django6.txt","cadrebleu") ;
00398     
00399     
p
("texte") ;
00400     echo
" Ce qui ne fonctionne pas dans cette partie du tutoriel dans les salles " ;
00401     echo
" du département informatique est la partie timezone. " ;
00402     echo
" Il faut écrire "
.b("import datetime")." pour pouvoir utiliser les ".em("timezone")."." ;
00403     
finp() ;
00404     
00405     
finsolution
() ; # contient un blockquote
00406     
00407     
finblockquote
() ; # tp
00408     
00409     ## -------------------------------------------------------------------------------------------
00410     
00411     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Les vues (troisième partie)
00412     
00413     ## -------------------------------------------------------------------------------------------
00414     
00415     
blockquote
() ; # tp
00416     
00417     
blockquote
() ; # énoncé
00418     
00419     
p
("texte") ;
00420     echo
" Suivre ce qui est indiqué dans la " ;
00421     echo
href
("https://docs.djangoproject.com/fr/2.1/intro/tutorial03/","troisième partie") ;
00422     echo
" du tutoriel. " ;
00423     
finp() ;
00424     
00425     
p
("texte") ;
00426     echo
" Après avoir ajouté les vues avec les textes en anglais, essayer de modifier ces vues " ;
00427     echo
" pour que les textes soient en français." ;
00428     
finp() ;
00429     
00430     
finblockquote
() ; # énoncé
00431     
00432     
solutionTP
($numExo,$numSerie) ; # contient un blockquote
00433     
00434     
p
("texte") ;
00435     echo
"Question volontairement non corrigée. Venez en T.P.&nbsp;!" ;
00436     
finp() ;
00437     
00438     
finsolution
() ; # contient un blockquote
00439     
00440     
finblockquote
() ; # tp
00441     
00442     ## -------------------------------------------------------------------------------------------
00443     
00444     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Les formulaires (partie quatre)
00445     
00446     ## -------------------------------------------------------------------------------------------
00447     
00448     
blockquote
() ; # tp
00449     
00450     
blockquote
() ; # énoncé
00451     
00452     
p
("texte") ;
00453     echo
" Suivre ce qui est indiqué dans la " ;
00454     echo
href
("https://docs.djangoproject.com/fr/2.1/intro/tutorial04/","quatrième partie") ;
00455     echo
" du tutoriel. " ;
00456     
finp() ;
00457     
00458     
p
("texte") ;
00459     echo
" Après avoir ajouté le code de la fonction "
.b("vote()")." comme indiqué avec les textes en anglais, essayer de modifier ce code " ;
00460     echo
" pour que le retour du "
.b(em("render"))." soit en français." ;
00461     
finp() ;
00462     
00463     
00464     
p
("texte") ;
00465     echo
" Pouvez-vous aussi afficher en français le message d'erreur 404&nbsp;?" ;
00466     
finp() ;
00467     
00468     
finblockquote
() ; # énoncé
00469     
00470     
solutionTP
($numExo,$numSerie) ; # contient un blockquote
00471     
00472     
p
("texte") ;
00473     echo
" Pour le message d'erreur 404 (page not found), le tutoriel fournit la réponse. " ;
00474     echo
" Si ce n'est pas clair, consulter les lien suivants&nbsp;: " ;
00475     echo
href
("https://stackoverflow.com/questions/17662928/django-creating-a-custom-500-404-error-page","custom 404").", &nbsp;" ;
00476     echo
href
("https://wsvincent.com/django-local-404-page/","django-local-404-page")." ou en français " ;
00477     
$url
= "https://openclassrooms.com/fr/courses/1871271-developpez-votre-site-web-avec-le-framework-django/1871890-votre-premiere-page-grace-aux-vues" ;
00478     echo
href
($url,"page 404").". " ;
00479     
finp() ;
00480     
00481     
finsolution
() ; # contient un blockquote
00482     
00483     
finblockquote
() ; # tp
00484     
00485     ## -------------------------------------------------------------------------------------------
00486     
00487     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # Les tests (partie cinq) et la fin du tutoriel
00488     
00489     ## -------------------------------------------------------------------------------------------
00490     
00491     
blockquote
() ; # tp
00492     
00493     
blockquote
() ; # énoncé
00494     
00495     
p
("texte") ;
00496     echo
" Vérifier que tout ce qui est écrit sur les tests dans la " ;
00497     echo
href
("https://docs.djangoproject.com/fr/2.1/intro/tutorial05/","partie cinq") ;
00498     echo
" du tutoriel fonctionne comme indiqué. " ;
00499     
finp() ;
00500     
00501     
p
("texte") ;
00502     echo
" Est-ce compliqué d'écrire des tests avec Django&nbsp;?" ;
00503     
finp() ;
00504     
00505     
p
("texte") ;
00506     echo
" Essayer d'ajouter un test pour garantir que dans l'ajout d'un utilisateur, le nom " ;
00507     echo
" comporte au moins 3 caractères." ;
00508     
finp() ;
00509     
00510     
p
("texte") ;
00511     echo
"Terminer le tutoriel en effectuant toutes les manipulations demandées." ;
00512     
finp() ;
00513     
00514     echo
"" ;
00515     
00516     
finblockquote
() ; # énoncé
00517     
00518     
solutionTP
($numExo,$numSerie) ; # contient un blockquote
00519     
00520     
p
("texte") ;
00521     echo
" Les tests ne sont pas plus compliqués en Django que dans d'autres langages ou frameworks. " ;
00522     echo
" Si les explications du tutoriel ne sont pas suffisantes, consulter, en anglais " ;
00523     echo
href
("https://wsvincent.com/django-testing-tutorial/","django-testing-tutorial") ;
00524     echo
" ou, en français, " ;
00525     
$url
= "https://openclassrooms.com/fr/courses/1871271-developpez-votre-site-web-avec-le-framework-django/1874262-les-tests-unitaires" ;
00526     echo
href
($url,"tests unitaires en Django").". " ;
00527     
finp() ;
00528     
00529     
finsolution
() ; # contient un blockquote
00530     
00531     
finblockquote
() ; # tp
00532     
00533     ## -------------------------------------------------------------------------------------------
00534     
00535     
$tdmCRLM
->afficheRubrique("oui") ; $numExo++ ; # ne application plus complète entièrement en français
00536     
00537     ## -------------------------------------------------------------------------------------------
00538     
00539     
blockquote
() ; # tp
00540     
00541     
blockquote
() ; # énoncé
00542     
00543     
p
("texte") ;
00544     echo
" Visiblement le tutoriel utilise des noms anglais partout, comme " ;
00545     echo
ghBleu
(" mysite")." au lieu de ".ghVert("monsite").", " ;
00546     echo
ghBleu
(" polls")." au lieu de ".ghVert("sondage").", " ;
00547     echo
ghBleu
(" Question text")." au lieu de ".ghVert("Texte de la question")."," ;
00548     echo
ghBleu
(" User")." au lieu d'".ghVert("utilisateur").", " ;
00549     echo
ghBleu
(" Date published")." au lieu de ".ghVert("Date de publication")."." ;
00550     echo
" Recommencer tout le tutoriel dès le début en nommant tout en français, des noms de fichiers aux champs " ;
00551     echo
" de la base de données. " ;
00552     
finp() ;
00553     
00554     
p
("texte") ;
00555     echo
" Compléter le site du tutoriel initial avec la gestion de deux "
.em("polls")." nommés sondage et questionnaire. " ;
00556     echo
" Le premier "
.em("poll")." consiste à demander à l'utilisateur s'il est fumeur, " ;
00557     echo
" réponse obligatoire OUI ou NON. " ;
00558     echo
" Le second "
.em("poll")." demande à l'utilisateur sa taille en centimètres, son poids actuel en kilogrammes " ;
00559     echo
" et le poids idéal qu'il/elle aimerait atteindre. " ;
00560     
finp() ;
00561     
00562     
p
("texte") ;
00563     echo
b
("En option, ") ;
00564     echo
" fournir la liste des gens fumeurs et puis celle des non fumeurs dans un document PDF généré à la volée, " ;
00565     echo
" afficher un histogramme des fréquences relatives des fumeurs et des non fumeurs (axes de 0 à 100&nbsp;%) " ;
00566     echo
" sous forme d'un graphique au format PNG, " ;
00567     echo
" fournir une liste alphabétique des personnes ayant donné leur poids " ;
00568     echo
" avec les informations taille, poids actuel, IMC actuel, poids idéal et IMC idéal " ;
00569     echo
" ainsi qu'un graphique au format SVG qui fournit un box-plot des poids réels et actuels, " ;
00570     echo
" un graphique au format PNG de l'histogramme de la distribution des poids réels..." ;
00571     
finp() ;
00572     
00573     
00574     
finblockquote
() ; # énoncé
00575     
00576     
solutionTP
($numExo,$numSerie) ; # contient un blockquote
00577     
00578     
p
("texte") ;
00579     echo
"L'ensemble des modifications au tuteur de base sont dans le fichier " ;
00580     echo
href
("tuteurComplet.zip").". Il s'agit en fait du code écrit par une étudiante " ;
00581     echo
b
("Alice BAZANT&Eacute;")." qui nous a donné son accord pour qu'on puisse l'utiliser et que nous remercions officiellement. " ;
00582     echo
" En principe, avec Danjo 2.1 ce site est totalement fonctionnel." ;
00583     
finp() ;
00584     
00585     
00586     
p
("texte") ;
00587     echo
"Une fois l'archive décompressée, après une migration via "
.b("python manage.py migrate") ;
00588     echo
" le site affiche, via "
.b("python manage.py runserver") ;
00589     echo
" pour l'URL "
.href("http://127.0.0.1:8000/polls") ;
00590     
finp() ;
00591     
00592     
p() ;
00593     
nbsp
(5) ;
00594     
$img
= "abp01.png" ;
00595     echo
href
($img,img($img,"",600)) ;
00596     
finp() ;
00597     
00598     
p
("texte") ;
00599     echo
"Si on clique sur le questionnaire "
.b("Quoi de neuf&nbsp;?")." on voit " ;
00600     
finp() ;
00601     
00602     
p() ;
00603     
nbsp
(5) ;
00604     
$img
= "abp02.png" ;
00605     echo
href
($img,img($img,"",600)) ;
00606     
finp() ;
00607     
00608     
p
("texte") ;
00609     echo
" puis, une fois le vote validé " ;
00610     
finp() ;
00611     
00612     
p() ;
00613     
nbsp
(5) ;
00614     
$img
= "abp03.png" ;
00615     echo
href
($img,img($img,"",600)) ;
00616     
finp() ;
00617     
00618     
p
("texte") ;
00619     echo
" Voici le PDF généré&nbsp;:" ;
00620     
finp() ;
00621     
00622     
p() ;
00623     
nbsp
(5) ;
00624     
$img
= "abp-pdf01.png" ;
00625     echo
href
($img,img($img,"",600)) ;
00626     
finp() ;
00627     
00628     
p
("texte") ;
00629     echo
"Si on clique sur le questionnaire "
.b("Etes-vous fumeur&nbsp;?")." on voit " ;
00630     
finp() ;
00631     
00632     
p() ;
00633     
nbsp
(5) ;
00634     
$img
= "abp04.png" ;
00635     echo
href
($img,img($img,"",600)) ;
00636     
finp() ;
00637     
00638     
p
("texte") ;
00639     echo
" puis, une fois le vote validé " ;
00640     
finp() ;
00641     
00642     
p() ;
00643     
nbsp
(5) ;
00644     
$img
= "abp05.png" ;
00645     echo
href
($img,img($img,"",600)) ;
00646     
finp() ;
00647     
00648     
p
("texte") ;
00649     echo
" et le PDF généré est&nbsp;:" ;
00650     
finp() ;
00651     
00652     
p() ;
00653     
nbsp
(5) ;
00654     
$img
= "abp-pdf02.png" ;
00655     echo
href
($img,img($img,"",600)) ;
00656     
finp() ;
00657     
00658     
00659     
p
("texte") ;
00660     echo
"Si on clique sur le questionnaire "
.b("Etes-vous en forme&nbsp;?")." on voit " ;
00661     
finp() ;
00662     
00663     
p() ;
00664     
nbsp
(5) ;
00665     
$img
= "abp06.png" ;
00666     echo
href
($img,img($img,"",600)) ;
00667     
finp() ;
00668     
00669     
p
("texte") ;
00670     echo
" puis, une fois le vote validé " ;
00671     
finp() ;
00672     
00673     
p() ;
00674     
nbsp
(5) ;
00675     
$img
= "abp07.png" ;
00676     echo
href
($img,img($img,"",600)) ;
00677     
finp() ;
00678     
00679     
p
("texte") ;
00680     echo
" Voici le PDF généré&nbsp;:" ;
00681     
finp() ;
00682     
00683     
p() ;
00684     
nbsp
(5) ;
00685     
$img
= "abp-pdf03.png" ;
00686     echo
href
($img,img($img,"",600)) ;
00687     
finp() ;
00688     
00689     
p
("texte") ;
00690      echo
" Nous vous laissons chercher, dans la petite centaine de fichiers présents dans ce projet, " ;
00691      echo
" quels modules ont été utilisés pour les graphiques, la création du PDF, etc. Ce sera pour vous " ;
00692      echo
" l'occasion de lire du
$python et de comprendre l'architecture d'un projet au sens de ".ghBleu("Django").". " ;
00693      echo
" Par exemple, dans la barre de menu noir, il y a marqué SONNAIRE au lieu de QUESTIONNAIRE, ce serait à changer... " ;
00694      echo
" Vous pouvez aussi exécuter "
.b("python manage.py createsuperuser")." pour avoir des droits d'administration afin de consulter tout le site. " ;
00695     
finp() ;
00696     
00697     
p() ;
00698     
nbsp
(5) ;
00699     
$img
= "sonnaire.png" ;
00700     echo
href
($img,img($img,"",300)) ;
00701     
finp() ;
00702     
00703     
p
("texte") ;
00704      echo
" Pour les courageuses et les courageux, le lien "
.href("tuteurComplet_FR.zip") ;
00705      echo
" fournit une solution tout en français -- ce qui ne consiste pas juste à renommer les répertoires -- comme ci-dessous&nbsp;:" ;
00706     
finp() ;
00707     
00708     
p() ;
00709     
nbsp
(5) ;
00710     
$img
= "djangoTuteur_FR.png" ;
00711     echo
href
($img,img($img,"",600)) ;
00712     
finp() ;
00713     
00714     
p
("texte") ;
00715      echo
" Au passage, l'URL "
.b("http://127.0.0.1:8000")." renvoie aussi sur la bonne page..." ;
00716     
finp() ;
00717     
00718     
finsolution
() ; # contient un blockquote
00719     
00720     
finblockquote
() ; # tp
00721     
00722     #############################################################################
00723     
00724     
finTP
($numSerie) ;
00725     
?>

Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.

 

 

retour gH    Retour à la page principale de   (gH)