Valid XHTML     Valid CSS2    

Listing du fichier crs5.php

 

00001     <?php
00002     
# # (gH) -_- crs4.php ; TimeStamp (unix) : 07 Septembre 2017 vers 13:48
00003     
error_reporting(E_ALL | E_NOTICE ) ;
00004     
header
('Content-Type "text/html; charset=iso-8859-1"') ;
00005     
ini_set
( 'default_charset', 'ISO-8859-1' );
00006     include(
"decra-inc.php") ;
00007     
$numCours
= 5 ; debutCours($numCours,"Solutions classiques aux problèmes classiques") ;
00008     
00009     
#############################################################################
00010     
00011     # la séquence saisie / calcul / affichage
00012     # la séquence initialisation / calcul / mise en forme ; ex. pourcentage
00013     # fichiers de données pour calculs statistiques et formats standards
00014     # tris et exports
00015     # tracés de graphes via plot
00016     # http et api rest, le modèle MVC
00017     # login/password
00018     # frameworks django et ror
00019     
00020     #############################################################################
00021     
00022     
$tableauDesRubriques = array() ;
00023     
$idr
= 0 ;
00024     
$idr
++; $tableauDesRubriques[$idr] = "Un exemple classique : le couple login/password" ;
00025     
$idr
++; $tableauDesRubriques[$idr] = "Des framework bienvenus : Django et ROR" ;
00026     
$idr
++; $tableauDesRubriques[$idr] = "Le modèle MVC[2]" ;
00027     
$idr
++; $tableauDesRubriques[$idr] = "Formats standards de fichiers" ;
00028     
$tdmCRLM
= new tdm($tableauDesRubriques) ;
00029     
$tdmCRLM
->titre() ;
00030     
$tdmCRLM
->menu("oui","oui") ;
00031     
00032     
#############################################################################
00033     
00034     
$tdmCRLM
->afficheRubrique("oui") ; # Exemple, instance, cas-type et cas problématique"
00035     
00036     #############################################################################
00037     
00038     
blockquote() ;
00039     
00040     
p
("texte") ;
00041     echo
"Concevoir et développer des applications, ce n'est pas forcément concevoir et développer de nouveaux algorithmes, de " ;
00042     echo
" nouvelles méthodes ou de de nouvelles solutions car beaucoup de composantes d'une application ont souvent déjà été programmées. " ;
00043     echo
" Prenons l'exemple simple d'une application Web avec des utilisateurs qui doivent s'authentifier. Une technique classique aujourd'hui (2017) " ;
00044     echo
" consiste à passer par un formulaire "
.b("login/password")." avec souvent un ".b("login")." correspondant à une adresse mail." ;
00045     
finp() ;
00046     
00047     
imgurl
("login.png","https://www.primfx.com/forum/programmation/php/mini-tuto-creation-pages-add-users-login-980") ;
00048     
00049     
p
("texte") ;
00050     echo
"Il n'y a rien de très difficile techniquement, mais il y a quand m&ecirc;me pas mal de travail à effectuer" ;
00051     echo
" (voir par exemple, nos pages "
.href("../internet/Lte/","LTE").")&nbsp;:" ;
00052     
finp() ;
00053     
00054     
ul() ;
00055     
00056     
debutli
() ; p() ;
00057      echo
"il faut une créer puis administrer une base de données pour gérer les utilisateurs&nbsp;;" ;
00058     
finp
() ; finli() ;
00059     
00060     
debutli
() ; p() ;
00061      echo
"il faut " ;
00062      echo
href
("https://openclassrooms.com/courses/apprenez-a-programmer-en-python/gestion-des-mots-de-passe","chiffrer les mots de passe") ;
00063      echo
" à l'aide d'une "
.href("https://fr.wikipedia.org/wiki/Injection_(math%C3%A9matiques)","fonction injective") ;
00064      echo
"&nbsp;;" ;
00065     
finp
() ; finli() ;
00066     
00067     
debutli
() ; p() ;
00068      echo
"il faut prévoir l'envoi de mail pour le fameux cas "
.b("mot de passe oublié") ;
00069      echo
"&nbsp;;" ;
00070     
finp
() ; finli() ;
00071     
00072     
debutli
() ; p() ;
00073      echo
"il faut éventuellement prévoir de lister, comptabiliser, désactiver, réactiver, supprimer les utilisateurs..." ;
00074     
finp
() ; finli() ;
00075     
00076     
finul() ;
00077     
00078     
p
("texte") ;
00079     echo
"Tout cela étant très standard, de nombreuses solutions ont déjà été créées et pour divers langages. " ;
00080     echo
" S'il est possible de concevoir "
.b("from scratch")." de nouvelles applications et d'inclure ces solutions dans l'application, " ;
00081     echo
" des solutions logicielles nommées " ;
00082     echo
href
("https://fr.wikipedia.org/wiki/Cat%C3%A9gorie:Framework_de_programmation","frameworks de programmation") ;
00083     echo
" et " ;
00084     echo
href
("https://en.wikipedia.org/wiki/Comparison_of_web_frameworks","frameworks de développement") ;
00085     echo
" sont apparues, qui proposent d'aider à développer de nouvelles applications à partir de modules génériques, qu'elles soient Web ou pas. " ;
00086     echo
" Pour plus de détails, nous renvoyons à notre " ;
00087     echo
href
("../Scripts/","cours de master") ;
00088     echo
" sur ces frameworks et leurs liens avec les langages de scripts. Nous allons présenter brièvement ici deux fameux frameworks " ;
00089     echo
href
("https://www.djangoproject.com/","django") ;
00090     echo
" et " ;
00091     echo
href
("http://rubyonrails.org/","ror") ;
00092     echo
"." ;
00093     
finp() ;
00094     
00095     
$i1
= "python-django.png" ;
00096     
$u1
= "https://fr.wikipedia.org/wiki/Django_(framework)" ;
00097     
$i2
= "ruby-rails.png" ;
00098     
$u2
= "https://fr.wikipedia.org/wiki/Ruby_on_Rails" ;
00099     
00100     
deuxImgurl
($i1,$u1,$i2,$u2,200) ;
00101     
00102     
finblockquote() ;
00103     
00104     
#############################################################################
00105     
00106     
$tdmCRLM
->afficheRubrique("oui") ; # Des framework bienvenus : Django et RO
00107     
00108     #############################################################################
00109     
00110     
blockquote() ;
00111     
00112     
p
("texte") ;
00113     echo
"Les frameworks " ;
00114     echo
href
("https://www.djangoproject.com/","django") ;
00115     echo
" et " ;
00116     echo
href
("http://rubyonrails.org/","ror") ;
00117     echo
" sont des ensembles "
.b("cohérents")." de composants qui permettent facilement de réaliser des applications Web s'exécutant " ;
00118     echo
" dans un navigateur. Ce ne sont pas des "
.href("https://fr.wikipedia.org/wiki/Framework","bibliothèques logicielles") ;
00119     echo
" mais plut&ocirc;t des modules génériques pr&ecirc;ts à l'emploi qu'il faut configurer et combiner pour construire l'application." ;
00120     echo
" Nous n'en dirons pas plus car ces deux frameworks ont de nombreuses documentations, tutoriels et vidéos, comme le montrent les liens " ;
00121     echo
" ci-dessous." ;
00122     
finp() ;
00123     
00124     
pvide() ;
00125     
00126     
blockquote() ;
00127     
table
(1,15,"collapse") ;
00128     
entetesTableau
("Type Rails Django","cadrebleu") ;
00129     
tr
("cadrejaune") ;
00130     
td
() ; echo "Tutoriel" ; fintd() ;
00131     
td
() ; echo href("https://www.railstutorial.org/book","rails tutorial") ; fintd() ;
00132     
td
() ; echo href("https://www.djangoproject.com/start/","django tutorial") ; fintd() ;
00133     
fintr() ;
00134     
tr
("cadrejaune") ;
00135     
td
() ; echo "Vidéos" ; fintd() ;
00136     
td
() ; echo href("https://www.google.fr/search?q=rails+tutorial&amp;&amp;tbm=vid","video link 1") ; fintd() ;
00137     
td
() ; echo href("https://www.google.fr/search?q=django+tutorial&amp;&amp;tbm=vid","video link 2") ; fintd() ;
00138     
fintr() ;
00139     
tr
("cadrejaune") ;
00140     
td
() ; echo "Livres" ; fintd() ;
00141     
td
() ; echo href("https://www.google.fr/search?q=bookss+ruby+rails","books link 1") ; fintd() ;
00142     
td
() ; echo href("https://www.google.fr/search?q=books+django+python","books link 2") ; fintd() ;
00143     
fintr() ;
00144     
fintable() ;
00145     
finblockquote() ;
00146     
00147     
h3
("2.1 Un mini-mini-mini framework en PHP") ;
00148     
00149     
blockquote() ;
00150     
00151     
p
("texte") ;
00152     echo
" Afin de montrer comment fonctionnent les "
.em("frameworks").", nous avons fait écrire par nos étudiants de master " ;
00153     echo
" une commande nommée "
.b("minifp")." qui crée, remplit et visualise une base de données MySQL. " ;
00154     echo
" Voici le fonctionnement de cette commande&nbsp;:" ;
00155     
finp() ;
00156     
00157     
pre_fichier
("minifp1.txt","cadrejaune") ;
00158     
00159     
p
("texte") ;
00160     echo
" Il est clair qu'on ne voit nulle part de code MySQL et pourtant, la table est bien gérée. " ;
00161     echo
" Il ne serait pas compliqué d'utiliser un formulaire HTML pour proposer et exécuter les actions de création remplissage et visualisation. " ;
00162     
finp() ;
00163     
00164     
p
("texte") ;
00165     echo
" Avec un paramètre debug, il serait facile de voir le code MySQL produit par la commande, comme ci-dessous&nbsp;:" ;
00166     
finp() ;
00167     
00168     
pre_fichier
("minifp2.txt","cadrejaune") ;
00169     
00170     
finblockquote() ;
00171     
00172     
h3
("2.2 Un mini-mini exemple avec ".aname("Django","Django")) ;
00173     
00174     
blockquote() ;
00175     
00176     
p
("texte") ;
00177     echo
"Si tout est bien installé et configuré, une mini-version d'application peut-&ecirc;tre créée via "
.b("django-admin&nbsp;startproject&nbsp;loginp").". " ;
00178     echo
" Ensuite, les commandes suivantes permettent d'activer les bases de données, de définir un super-utilisateur et de lancer l'application, " ;
00179     echo
" accessible à l'adresse "
.href("http://127.0.0.1:8000").", le système d'administration étant gérable à l'adresse ".href("http://127.0.0.1:8000/admin")."." ;
00180     
finp() ;
00181     
00182     
table
(0,20) ;
00183     
tr() ;
00184     
td
("L","valigntop") ;
00185     
pre_fichier
("loginp-demo.txt","cadre") ;
00186     
fintd() ;
00187     
td() ;
00188     
p() ;
00189     
$img
= "django-loginp.png" ;
00190     echo
href
($img,img($img,"",300)) ;
00191     
finp() ;
00192     
fintd() ;
00193     
fintr() ;
00194     
fintable() ;
00195     
00196     
p
("texte") ;
00197     echo
"On peut éventuellement aller consulter les base de données générées avec "
.b("sqlitebrower")." ou directement en ".b("sqlite3")." si on en connait les commandes&nbsp;:" ;
00198     
finp() ;
00199     
00200     
pre_fichier
("loginp-bd.txt","cadrejaune") ;
00201     
00202     
p
("texte") ;
00203     echo
"Voici l'arborescence du projet créé&nbsp;:" ;
00204     
finp() ;
00205     
00206     
pre_fichier
("tree_loginp.txt","cadrebleu ") ;
00207     
00208     
finblockquote() ;
00209     
00210     
h3
("2.3 Un mini-mini exemple avec Ruby on ".aname("rails","rails")) ;
00211     
00212     
blockquote() ;
00213     
00214     
p
("texte") ;
00215     echo
"Si tout est bien installé et configuré, une mini-version d'application peut-&ecirc;tre créée via "
.b("rails new loginr").". " ;
00216     echo
" Ensuite, les commandes suivantes permettent de créer des utilisateurs avec un nom et un email, puis d'activer les bases de données et de lancer l'application, " ;
00217     echo
" accessible à l'adresse "
.href("http://127.0.0.1:3000").", le système d'administration étant gérable à l'adresse ".href("http://127.0.0.1:3000/users")."." ;
00218     
finp() ;
00219     
00220     
pre_fichier
("loginr-demo.txt","cadre") ;
00221     
00222     
p
("texte") ;
00223     echo
"Là encore, on peut éventuellement aller consulter les base de données générées avec "
.b("sqlitebrower")." ou directement en ".b("sqlite3")." si on en connait les commandes, " ;
00224     echo
" la base de données est dans "
.b("loginr/db/development.sqlite3").", son schema en Ruby est ".b("schema.rb")."..." ;
00225     
finp() ;
00226     
00227     
p
("texte") ;
00228     echo
"Voici l'arborescence du projet créé&nbsp;:" ;
00229     
finp() ;
00230     
00231     
pre_fichier
("tree_loginr.txt","cadrebleu ") ;
00232     
00233     
p
("texte") ;
00234     echo
"Et le schéma (minimaliste) de la base de données&nbsp;:" ;
00235     
finp() ;
00236     
00237     
pre_fichier
("schema.rb.txt","cadrejaune") ;
00238     
00239     
p
("texte") ;
00240     echo
"Il va sans dire que le paradigme d'";
00241     echo
href
("https://fr.wikipedia.org/wiki/Mapping_objet-relationnel","ORM") ;
00242     echo
" prend tout son sens ici, qu'on le décline en " ;
00243     echo
href
("https://www.sqlalchemy.org/","SQLAchemy") ;
00244     echo
" pour " ;
00245     echo
href
("https://www.djangoproject.com/","Python/Django") ;
00246     echo
" ou en " ;
00247     echo
href
("https://fr.wikipedia.org/wiki/Active_record","ActiveRecord") ;
00248     echo
" pour " ;
00249     echo
href
("https://api.rubyonrails.org/","Ruby on Rails")." et que le test des sites Web associés est " ;
00250     echo
" très bien automatisé comme le montrent les pages " ;
00251     echo
href
("https://guides.rubyonrails.org/testing.html","rails testing") ;
00252     echo
" et " ;
00253     echo
href
("https://docs.djangoproject.com/fr/3.1/topics/testing/","django testing").". " ;
00254     
finp() ;
00255     
00256     
finblockquote() ;
00257     
00258     
pvide() ;
00259     
00260     
finblockquote() ;
00261     
00262     
#############################################################################
00263     
00264     
$tdmCRLM
->afficheRubrique("oui") ; # Le modèle MVC[2]
00265     
00266     #############################################################################
00267     
00268     
blockquote() ;
00269     
00270     
p
("texte") ;
00271     echo
" Le développement d'applications à l'aide d'un framework repose souvent sur le modèle " ;
00272     echo
href
("https://fr.wikipedia.org/wiki/Mod%C3%A8le-vue-contr%C3%B4leur","MVC") ;
00273     echo
" autrement dit " ;
00274     
$ug
= "https://www.google.fr/search?q=Mod%C3%A8le+vue+contr%C3%B4leur&amp;tbm=isch" ;
00275     echo
href
($ug,"modèle/vue/controleur") ;
00276     echo
"." ;
00277     echo
" On pourra consulter la page " ;
00278     echo
href
("https://perso.liris.cnrs.fr/lmedini/enseignement/M1IF03/CM/3_Outils_serveur.pdf","outils_serveur") ;
00279     echo
" pour plus d'informations sur les frameworks." ;
00280     
finp() ;
00281     
00282     
imgurl
("mvc.png",$ug,"","cadreimage") ;
00283     
00284     
p
("texte") ;
00285     echo
ghRouge
("Remarque&nbsp;:") ;
00286     echo
" pour les applications Web, il s'agit plus souvent d'un modèle dérivé de " ;
00287     echo
b
("MVC2")." plut&ocirc;t que de " ;
00288     echo
b
("MVC")." sachant que ces " ;
00289     echo
href
("https://fr.wikipedia.org/wiki/Architecture_logicielle","architectures logicielles") ;
00290     echo
" étaient au début prévues pour des applications graphiques avant Internet." ;
00291     echo
" On pourra comparer ce type d'architecture à celle nommée " ;
00292     echo
href
("https://www.google.fr/search?safe=off&amp;tbm=isch&amp;q=architecture+trois+tiers","trois tiers")."." ;
00293     
finp() ;
00294     
00295     
finblockquote() ;
00296     
00297     
#############################################################################
00298     
00299     
$tdmCRLM
->afficheRubrique("oui") ; # Formats standards de fichiers
00300     
00301     #############################################################################
00302     
00303     
blockquote() ;
00304     
00305     
$uxml
= "../Webrd" ;
00306     
$ucsv
= "https://fr.wikipedia.org/wiki/Comma-separated_values" ;
00307     
$urtf
= "https://en.wikipedia.org/wiki/Rich_Text_Format" ;
00308     
$updf
= "https://fr.wikipedia.org/wiki/Portable_Document_Format" ;
00309     
00310     
p
("texte") ;
00311     echo
"Si les entrées/sorties des applications Web se réduisent souvent à des formulaires et à du texte formaté rendu via un navigateur, " ;
00312     echo
" les applications classiques, elles, ont besoin de fichiers en entrée et en sortie. A part les formatages " ;
00313     echo
href
($uxml,"XML").", il y a quelques standards assez simples à mettre en oeuvre pour que ces fichiers soient utilisables en bureautique. " ;
00314     echo
" En particulier le format " ;
00315     echo
href
($ucsv,"CSV") ;
00316     echo
" est très pratique si les données doivent &ecirc;tre traitées sous Microsoft Excel ou équivalent et " ;
00317     echo
" le format " ;
00318     echo
href
($urtf,"RTF") ;
00319     echo
" est sans doute un bon choix si les données doivent &ecirc;tre traitées sous Microsoft Word, " ;
00320     echo
" de m&ecirc;me que le format ";
00321     echo
href
($updf,"PDF")." est le choix qui s'impose au fil des années pour les documents à imprimer." ;
00322     
finp() ;
00323     
00324     
blockquote() ;
00325     
table
(1,20,"collapse") ;
00326     
tr() ;
00327     
td
("C") ; echo href($uxml,s_span(b("XML"),"gros_car grougef")) ; fintd() ;
00328     
td
("C") ; echo href($updf,s_span(b("PDF"),"gros_car grougef")) ; fintd() ;
00329     
fintr() ;
00330     
tr() ;
00331     
td
("C") ; echo href($ucsv,s_span(b("CSV"),"gros_car grougef")) ; fintd() ;
00332     
td
("C") ; echo href($urtf,s_span(b("RTF"),"gros_car grougef")) ; fintd() ;
00333     
fintr() ;
00334     
fintable() ;
00335     
finblockquote() ;
00336     
00337     
p
("texte") ;
00338     echo
" On n'oubliera pas ici que " ;
00339     echo
href
("https://pandoc.org/","pandoc")." est une solution logicielle capable de convertir les différents formats textes de documents." ;
00340     echo
" En ce qui concerne les feuilles de tableurs et les bases de données relationnelles, les formats CSV et DLM suffisent amplement " ;
00341     echo
" puisque l'information est écrite sous forme de tableaux rectangulaires contenant des données." ;
00342     
finp() ;
00343     
00344     
pvide() ;
00345     
00346     
finblockquote() ;
00347     
00348     
#############################################################################
00349     
00350     
finCours
($numCours) ;
00351     
?>

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)