<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet title="XSL formatting" type="text/xsl" href="http://u-classroom.net/feed/rss2/xslt" ?><rss version="2.0"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xmlns:wfw="http://wellformedweb.org/CommentAPI/"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>U Classroom - mod_python</title>
  <link>http://u-classroom.net/</link>
  <description>Un blog collectif, orienté vers l'apprentissage et l'enseignement collaboratif et communautaire de techniques applicables aux unix libres</description>
  <language>fr</language>
  <pubDate>Wed, 02 Jul 2008 07:44:07 +0200</pubDate>
  <copyright></copyright>
  <docs>http://blogs.law.harvard.edu/tech/rss</docs>
  <generator>Dotclear</generator>
  
    
  <item>
    <title>Python pour dynamiser vos sites (épisode IV - un nouvel espoir)</title>
    <link>http://u-classroom.net/post/2007/05/25/Python-pour-dynamiser-vos-sites</link>
    <guid isPermaLink="false">urn:md5:9dfd63e127ae2ceecf7021d4908abcbd</guid>
    <pubDate>Fri, 25 May 2007 20:46:00 +0200</pubDate>
    <dc:creator>gpocentek</dc:creator>
        <category>apache</category><category>mod_python</category><category>python</category>    
    <description>&lt;p&gt;Chez Ubuntu on aime bien python, et on aime bien faire des petits scripts qui génèrent des pages web (pour des stats par exemple). Et on a même la chance de pouvoir créer des pages dynamiques avec python&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;J'ai eu un peu de mal à trouver une documentation pas trop mal faite qui donne les bases de l'utilisation de &lt;a href=&quot;http://www.mo&quot; dpython.org=&quot;&quot;&gt;mod_python&lt;/a&gt; de manière simple et efficace. Essayons de remédier à ça.&lt;/p&gt;
&lt;h3&gt;Notes à propos de ce document&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Mieux vaut connaître un minimum python pour le suivre&amp;nbsp;;&lt;/li&gt;
&lt;li&gt;pour faciliter les choses, on suppose que les fichiers créés le sont à la racine du serveur web.&lt;/li&gt;
&lt;/ul&gt;    &lt;h3&gt;Installation&lt;/h3&gt;
&lt;p&gt;Sous debian/ubuntu &amp;amp; cie, rien de plus simple&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;sudo apt-get install libapache2-mod-python&lt;/pre&gt;
&lt;h3&gt;PSP ou Publisher Handler ?&lt;/h3&gt;
&lt;p&gt;&lt;tt&gt;mod_python&lt;/tt&gt; propose deux types de fonctionnement&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;PSP&lt;/strong&gt; – Python Server Pages – propose le même mode de fonctionnement que (par exemple) PHP. Du code python est inséré entre des balises &lt;code&gt;&amp;lt;%&lt;/code&gt; et &lt;code&gt;%&amp;gt;&lt;/code&gt;, pour générer une page contenant du texte HTML. Nous n'en parlerons pas ici&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Publisher Handler&lt;/strong&gt; propose une méthode totallement différente, et plutôt sympathique à utiliser :)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;Diving in&lt;/h3&gt;
&lt;h4&gt;htaccess&lt;/h4&gt;
&lt;p&gt;La première chose à faire pour utiliser le Publisher Handler est de créer un fichier &lt;tt&gt;.htaccess&lt;/tt&gt; (ou d'éditer directement la configuration d'apache) afin de donner certaines directives. Ce fichier ressemblera à&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;AddHandler mod_python .py&lt;br /&gt;PythonHandler mod_python.publisher&lt;br /&gt;PythonDebug On &lt;/pre&gt;
&lt;p&gt;Les fichiers avec extension &lt;tt&gt;.py&lt;/tt&gt; seront donc traités par apache comme des fichiers liés à mod_python. Le mode débogage n'est pas nécessaire (normalement) sur des pages en production, mais est presque indispensable pendant la phase de développement.&lt;/p&gt;
&lt;h4&gt;Script - étape 1&lt;/h4&gt;
&lt;p&gt;Créons un script &lt;tt&gt;script.py&lt;/tt&gt; avec ces quelques lignes&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;from mod_python import apache&lt;br /&gt;&lt;br /&gt;def index(req):&lt;br /&gt;        return &quot;&amp;lt;h2&amp;gt;hello world&amp;lt;/h2&amp;gt;&quot;&lt;/pre&gt;
&lt;p&gt;Rendez-vous sur &lt;tt&gt;&lt;a class=&quot;linkification-ext&quot; href=&quot;http://localhost/script&quot; title=&quot;Linkification: http://localhost/script&quot;&gt;http://localhost/script&lt;/a&gt;&lt;/tt&gt;, et admirez le résultat&amp;nbsp;!&lt;/p&gt;
&lt;p&gt;La première ligne du script parle d'elle même. La fonction &lt;tt&gt;index&lt;/tt&gt; est appelée lors de l'ouverture de la page web, et la chaîne de caractères qu'elle retourne est le contenu de la page. Mais dans cet exemple le texte est traité comme tel, c'est-à-dire non interprété. Pour remédier à ça, le script doit être transformé en&amp;nbsp;:&lt;/p&gt;
&lt;h4&gt;Script - étape 2&lt;/h4&gt;
&lt;pre&gt;from mod_python import apache&lt;br /&gt;&lt;br /&gt;def index(req):&lt;br /&gt;        req.content_type = &quot;text/html; charset=utf-8&quot;&lt;br /&gt;        return &quot;&amp;lt;h2&amp;gt;hello world&amp;lt;/h2&amp;gt;&quot;&lt;/pre&gt;
&lt;p&gt;Le texte retourné sera maintenant traité comme de l'html.&lt;/p&gt;
&lt;h4&gt;Script - étape 3&lt;/h4&gt;
&lt;p&gt;Passons à l'étape suivante avec un exemple de traitement de formulaire. Voici le code&amp;nbsp;:&lt;/p&gt;
&lt;pre&gt;from mod_python import apache&lt;br /&gt;&lt;br /&gt;def index(req):&lt;br /&gt;	req.content_type = &quot;text/html; charset=utf-8&quot;&lt;br /&gt;	return &quot;&quot;&quot;&amp;lt;html&amp;gt;&lt;br /&gt;  &amp;lt;body&amp;gt;&lt;br /&gt;    &amp;lt;form method=&quot;post&quot; action=&quot;http://u-classroom.net/post/2007/05/25/script/result&quot;&amp;gt;&lt;br /&gt;      Nom: &amp;lt;input type=&quot;text&quot; name=&quot;nom&quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;      Prenom: &amp;lt;input type=&quot;text&quot; name=&quot;prenom&quot;&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;      &amp;lt;input type=&quot;submit&quot; value=&quot;go&quot;&amp;gt;&lt;br /&gt;    &amp;lt;/form&amp;gt;&lt;br /&gt;  &amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&quot;&quot;&quot;&lt;br /&gt;&lt;br /&gt;def result(req):&lt;br /&gt;	req.content_type = &quot;text/html; charset=utf-8&quot;&lt;br /&gt;	return &quot;Bonjour %s %s !&quot; % (req.form['prenom'], req.form['nom'])&lt;/pre&gt;
&lt;p&gt;Comme dans l'exemple précédent, la fonction &lt;tt&gt;index&lt;/tt&gt; est appelée lors de l'accès à la page &lt;tt&gt;&lt;a class=&quot;linkification-ext&quot; href=&quot;http://localhost/script&quot; title=&quot;Linkification: http://localhost/script&quot;&gt;http://localhost/script&lt;/a&gt;&lt;/tt&gt;. Lorsque le formulaire est validé, la page &lt;tt&gt;script/result&lt;/tt&gt; est appelée, qui correspond en fait à un appel à la fonction &lt;tt&gt;result&lt;/tt&gt; du script &lt;tt&gt;script.py&lt;/tt&gt;.&lt;/p&gt;
&lt;p&gt;L'objet &lt;tt&gt;req&lt;/tt&gt; (la requête envoyée au serveur), possède un attribut &lt;tt&gt;form&lt;/tt&gt;, un dictionnaire qui contient toutes les données du formulaire validé &quot;name&quot; et &quot;value&quot;). Ceci fonctionne quelque soit la méthode d'envoi du formulaire utilisée (get ou post). Il ne reste plus qu'à traiter le formulaire comme bon vous semble et retourner la page html&lt;/p&gt;
&lt;p&gt;Bien évidemment, tous les modules et possibilités de python sont utilisables pour dynamiser vos pages web.&lt;/p&gt;
&lt;p&gt;Quelques liens utiles&amp;nbsp;:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://www.modpython.org/&quot;&gt;http://www.modpython.org/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.modpython.org/live/current/doc-html/&quot;&gt;documentation mod_python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.onlamp.com/pub/a/python/2004/02/26/python_server_pages.html&quot;&gt;PSP [en]&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Au prochain (éventuel) épisode, gestion des sessions et cookies...&lt;/p&gt;</description>
    
    
    
      </item>
    
</channel>
</rss>