1. Attention !! L'interpréteur Python3 installé sur le serveur Web possède un bug : les scripts CGI écrits en python3 ne fonctionneront pas s'ils contiennent des caractères accentués.
    Deux solutions pour cette année :
    1. enlever les caractères accentués (write in english for instance :) )
    2. basculer vers python2 (remplacer #!/usr/bin/python3 par #!/usr/bin/python).
    Préférez la première solution, ça vous évitera de gérer les incompatibilités python2/python3
  2. Attention aux retours à la ligne différents entre Windows et le reste du monde. Les éditeurs de texte gedit ... enregistrer sous ou (sous Windows) Notepad++ peuvent détecter le type de retour à la ligne et passer de l'un à l'autre. Si vous voyez le caractère ^M , c'est que vous avez des retours à la ligne à la Windows. Votre script ne fonctionnera pas sous Linux ! La commande UNIX dos2unix monScript.py permet de convertir les retours à la ligne.
  3. Dans les premières versions des fichiers upload.py et uploadCreate.py, il faut remplacer la fonction file() par un classique open(). En effet, file() était toléré jusqu'à python3.1. Il ne l'est plus depuis python3.2.
1. Le Web, HTML, XHTML, XHTML 1.0 Strict, CSS 2.1
Voir mon ancienne page Web.
2. Moteur de templates en Python
  • Travail à rendre pour dimanche 9 février 23h :
    • Le sujet du TP sur le moteur de templates
    • Regardez le site TradConcept. Désactivez et réactivez le style sous Firefox, pour voir ce qui est dû au style et ce qui est dû au contenu. Récupérez-le site chez-vous (lien). Faites un script python générant ce site à partir de templates (nous appelons template, tout morceau de code identique dans différentes pages. Un générateur automatique de site à partir de template permet de diminuer grandement les morceaux de code HTML dupliqués, et permet une maintenance du site plus aisée). Pour comprendre comment ça marche, téléchargez et étudiez PyTrad et basez-vous dessus pour la suite. Objectifs :
      • faciliter l'ajout/la modification d'un bout de code commun à toutes les pages
      • faciliter l'ajout d'une nouvelle page respectant la même structure
      Deux idées clés :
      • réduire à zéro le code HTML redondant
      • rassembler toutes les données d'une page web à un seul endroit
    • Pour ceux ne connaissant pas python, faites la même chose dans le langage de votre choix
3. CGI / Python
  • Le cours sur les formulaires
  • Le sujet du TP sur les CGIs et les formulaires
    • Partie 1 - les scripts à télécharger : cgi
    • Partie 2 - le formulaire HTML à télécharger : form.html
    • Partie 4 :
      • les formulaires HTML à télécharger : forms
      • les scripts à télécharger : cgi2
    • Autres scripts intéressants : cgi3
  • Comment donner à Apache la permission de créer des fichiers dans votre public_html ?
    • Intérêts :
      • Pour uploader un fichier, et que ce fichier soit accessible ultérieurement.
      • Si l'un de vos scripts crée dynamiquement un fichier (une image grâce à matplotlib, un fichier texte résultat, etc.), sur lequel on mettra un lien hypertexte.
    • Créez un sous-répertoire download dans votre répertoire web, grâce a une commande du style : mkdir ~/public_html/download
    • Donnez les permissions à tous (dont Apache) de créer des fichiers dans ce répertoire : chmod a+w ~/public_html/download
    • Notre script ouvrira un fichier en écriture, de nom "../download/arbre.nwk" (votre script étant dans ~/public_html/cgi-bin), puis créera dans la page HTML résultant un lien (<a href="../download/arbre.nwk"> pour permettre à l'utilisateur de le télécharger.
    • Problème : si 1000 utilisateurs se connectent et créent leur propre fichier résultat, il faudrait pour chacun d'eux des noms différents. Pour ça, créez des nombres aléatoires (en utilisant random, rand, randint, etc.) et nommez vos fichiers de la façon suivante par exemple : protein134581356.fasta.
    • La façon propre est d'utiliser les sessions (voir cours de Magali Contensin).
    • Il faudra aussi trouver un moyen de supprimer ces fichiers créés sinon votre disque dur finira par déborder.
    • Cette partie est également valable pour PHP (en l'occurrence, vous verrez les sessions en PHP).
  • Travail à rendre pour le dimanche 9 février 23h :
    • Pour ceux ayant fait le projet PS1 : votre projet de PS1 porté en application web avec python-CGI.
    • Pour les autres, un projet conséquent en CGI, en sachant que le support CGI pour Perl, Python2, Python3, Shell, et langages compilés (C, C++, Fortran) est installé.
    Évaluation :
    • Utilisez les validateurs HTML et CSS (w3.org) : pas conforme au standard XHTML 1.0 Strict ou HTML5 = pas la moyenne. Je ne veux aucune erreur ; les warnings sont tolérés.
    • Le script CGI doit fonctionner et ne pas générer d'exceptions (testez le avant, hors-ligne == en ligne de commande, puis avec cgitb activé).
    • A l'instar de TradConcept, faites une vraie séparation entre le CSS (aspect visuel) et HTML (contenu). Je visualiserai avec et sans CSS.
    • Vous devez tester sur les machines du CRFB. Si ca ne passe pas sur celles-ci : pas la moyenne.
    • Bien entenu il faut quand même un code conséquent. Si votre code est trop simpliste, creusez-vous un peu la tête pour faire quelquechose d'un peu sympa côté web.
3. Liens utiles CGI
  • Cours Python et cours CGI :
    • La page de Henri Garreta consacrée à Python BBSG.
    • Le chapitre 21.2 de la Python Library Reference.
    • Site sur les CGI en langage C, ainsi qu'un exemple modifié tiré de ce cours : formulaire et CGI.
5. Installation d'Apache et PHP - à faire chez vous !!

Il vous est indispensable de savoir installer Apache, le module PHP et un serveur MySQL sur votre système d'exploitation préféré (à faire durant votre temps libre).

  • Windows (XP/Vista/Seven)
    • Installez un bon éditeur de texte, comme NotePad++. Vous en aurez besoin pour écrire vos pages.
    • Installez une pile WAMP (Windows-Apache-MySQL-PHP), au choix :
    • Important : dans "Préférence des Dossiers", désactivez l'option "Masquer l'extension des fichiers dont le type est connu".
  • Linux (Ubuntu/Debian)
    • Installez le serveur web Apache et le module PHP :
      sudo apt-get install php5
      Il faut connaître son mot de passe administrateur.
    • Tester : créez un fichier test.php contenant la ligne <?php phpinfo(); ?> dans le répertoire /var/www/. Pour celà il vous faut également être administrateur.
    • Ouvrez votre navigateur préféré à l'adresse :http://localhost/test.php.
      Vous devez voir s'afficher un tableau de couleur violette contenant des informations sur votre système.
    • Pour qu'Apache publie le répertoire $HOME/public_html de chaque utilisateur, il faut activer le module userdir. Pour cela :
      sudo a2enmod userdir
    • Créez-vous un répertoire public_html. Pour celà :
      mkdir ~/public_html
      A l'intérieur de celui-ci, créez un fichier index.html. Il sera publié à l'adresse :
      http://localhost/~votre_login
    • Pour autoriser le serveur web à exécuter les scripts PHP situés dans les répertoires utilisateurs, il faut modifier un fichier de configuration :
      sudo gedit /etc/apache2/mods-enabled/php5.conf, et décommentez les lignes :
      <IfModule mod_userdir.c>
          <Directory /home/*/public_html>
              php_admin_value engine Off
          </Directory>
      </IfModule>
    • Redémarrez le serveur : sudo service apache2 restart (start pour démarrer, stop pour l'arrêter).
  • MacOS X (10.5/10.6)
    Le serveur web Apache et son module PHP sont déjà installés sous Mac OS. Il "suffit" de les activer.
    • Installez un bon éditeur de texte, comme Fraise.
    • Important : de la même façon que pour Windows, il faut désactivez l'option "Masquer l'extension des fichiers dont le type est connu" qui devrait se trouver dans un menu du style "Préférence des Dossiers".
    • Activez PHP5 : éditez le fichier "Macintosh HD:private:etc:apache2:httpd.conf". Le système vous demandera le mot de passe d'administration.
      Cherchez la ligne : #LoadModule php5_module et décommentez-là (c-à-d, enlevez le "#")
    • Démarrez Apache : allez dans "System Preferences:Internet & Network:Sharing". Cochez la case "Web Sharing".
    • Testez : créez un fichier test.php contenant la ligne <?php phpinfo(); ?> dans le répertoire "Macintosh HD:Library:WebServer:Documents".
    • Ouvrez votre navigateur préféré à l'adresse : http://localhost/test.php
6. Installation CGI / Python. À faire chez vous !!
  • Comment activer les CGI sous Apache : rajoutez à la fin du fichier /etc/apache2/httpd.conf (ou, si celui-ci n'existe pas ou est vide, dans /etc/apache2/apache2.conf) les lignes suivantes :
    <Directory /home/*/public_html/cgi-bin/>
    	Options ExecCGI
    	AddHandler cgi-script cgi pl py
    </Directory>
    
    Ceci indique que dans tous les répertoires /home/*/public_html/cgi-bin/, on peut exécuter des CGI (et uniquement ça! Si on veut pouvoir faire autre chose comme lister le contenu du répertoire, etc., il faudra rajouter d'autres options. Pour des raisons de sécurité il est conseillé de laisser comme ça). La seconde ligne indique que les extensions autorisées pour nos CGIs sont .cgi, .pl et .py.
    Puis, redémarrez le serveur : sudo service apache2 restart (start pour démarrer, stop pour l'arrêter).
7. Interconnexion Python et MySQL
8. Client HTTP en Python
9. Projet PHP
  • Le sujet
  • Le projet est à rendre pour le 28 mai 23h
10. Divers

Valid XHTML 1.0 Strict

CSS Valide !