Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Programmation > Autres langages > [Python] Papache > Lecture du sujet

[Python] Papache

Un serveur web en Python

Vous devez être inscrit pour pouvoir poster des messages

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne Krankkatze # Posté le 08/06/2008 à 17:49:07
Ob-la-di, Ob-la-da
Avatar
Groupe : Membres
Je voudrais vous faire part, après quatre mois de développement, d'un projet né d'un petit défi sur #sdz : un serveur HTTP en Python.
Je ne poste pas dans la catégorie "Vos projets" tout simplement parce que Papache n'a en soi rien de novateur. Il existe déjà des serveurs webs plus performants. Mais son intérêt réside dans son code. C'est pourquoi je poste ici.

Image utilisateur

Le projet, commencé en février, dispose maintenant de nombreuses capacités :
  • Des fichiers de configuration généraux et locaux
  • Un petit support pour la CGI en cours d'amélioration :-°
  • Des pages d'erreur personnalisées
  • Un listage des répertoires sans index, comprenant le nom, la taille, etc. du fichier
  • Un petit programme qui vérifie la validité des fichiers de configuration
  • ...

Le travail actuel consiste à réécrire son code en Orienté Objet, parce que, comme vous l'avez probablement remarqué, le nombre d'arguments des fonctions comme celle générant les logs est un peu accablant.
Image utilisateur
Je vous rassure, ce logo n'est que temporaire


Une documentation expliquant comment installer et configurer Papache se trouve à cette adresse.
Vous pouvez aussi utiliser le dépôt mercurial mis en place par delroth :
Code : Bash
1
hg clone http://delroth.is-a-geek.org:8080/

Vous pouvez également consulter le code sans le télécharger à l'aide du browser intègré à Trac.

Enfin, vous pouvez tester Papache du côté client : il est bien souvent lancé sur le serveur SSH d'Alwaysdata :

J'attends donc vos avis, vos conseils (parce qu'il y a un énorme boulot pour rendre le code un peu plus beau), et, ne disposant pas de serveur dédié, je serais très intéressé par l'expérience de quelqu'un hébergeant au quotidien son site avec Papache.

Ah, et puisque j'avais le temps, j'ai fait une Boîte Utilisateur :-°
Une dernière chose : pour être tenu au courant des dernières nouveautés concernant Papache, venez sur #papache@irc.epiknet.org. Les cinq premiers auront l'autovoice §
Merci !
Édité le 08/07/2008 à 12:55:53 par Krankkatze

Image utilisateur Image utilisateur
 
Hors ligne Artefact2 # Posté le 08/06/2008 à 17:59:00
C'est toi le bouc !
Avatar
Groupe : Membres
Citation : Krankkatze
(parce qu'il y a un énorme boulot pour rendre le code un peu plus beau)


T'en fais pas, du code python c'est toujours moche.

Je connaissais déjà ( :D ) et c'est bien fait. C'est très éducatif.

Image utilisateur
Mes tutoriels : Bien utiliser les fonctions de hachage / La 2D en C# / Utilisez les bases de données dans vos programmes C#

"Les lois privatives de liberté sont nocives à l'humanité"
Venez tous sur Freenet 0.7 !
 
Hors ligne anonyme # Posté le 08/06/2008 à 18:11:11
Groupe :
J'ai regardé en vitesse, tout d'abord dans ton outil de vérification de configuration, utilises optparse plutot que de parser les options à la main comme tu le fais actuellement.

Ensuite, pourquoi utiliser un format de fichier de configuration fait à la main plutot que par exemple du JSON, du XML ou juste un fichier INI, qui sont tous les trois parsables extrèmement facilement en Python (pour le premier, un simple eval() dans un sandbox, pour le deuxième, ElementTree ou BeautifulSoup, et pour le troisième ConfigParser).

Après, os.path.join est super pour rendre son code portable, ce que le tien n'est pas pour le moment (et ouais, les /, Windows aime pas). On a aussi des supers modules comme urlparse qui coupe une URL en morceaux, ou httplib qui te permettrais de traiter tes headers très facilement.

Bref, j'ai pas regardé en détail, mais je vois déja ça de flagrant ;) .
Hors ligne Krankkatze # Posté le 08/06/2008 à 18:16:08
Ob-la-di, Ob-la-da
Avatar
Groupe : Membres
Merci :)
Je me pencherai sur la question du fichier de configuration. Quant à porter pour windows, je sais pas si j'ai grand intérêt à le faire : qui, de nos jours, a envie de faire un serveur sous windows en y installant Python ?

Image utilisateur Image utilisateur
 
Hors ligne Natim # Posté le 08/06/2008 à 18:25:53
En stage chez Simple It
Avatar
Admins
Citation : Krankkatze
Quant à porter pour windows, je sais pas si j'ai grand intérêt à le faire : qui, de nos jours, a envie de faire un serveur sous windows en y installant Python ?


La question ne se pose pas en ces termes.
Aujourd'hui quand on programme, on fait des programmes portables (point)

Surtout que comme tu le fais en Python ce n'est pas bien dur.

Je connais par exemple des gens qui programme en Django sous Windows (Oui ils ont bien du courage mais ça fonctionne).

En gros, faire un truc portable c'est toujours une bonne idée.
Je trouve ça sympa, as-tu un repos mercurial ou svn ?

Fait attention, il me semble avoir entendu qu'il est interdit de lancer daemon sur alwaysdata.
Si tu as besoin, je peux te passer un bout de dedibox (pour un petit prix :p)

from sdz.vt35.bugs import correction
Python IRC sur Epiknet
@ bientôt Natim
Status Jabber : Image utilisateur Image utilisateur
Zenwalk-fr.org
 
Hors ligne Krankkatze # Posté le 08/06/2008 à 18:29:44
Ob-la-di, Ob-la-da
Avatar
Groupe : Membres
J'ai pas de budget informatique :-°

Sinon, j'ai pas de svn, sinon ça voudrait dire que j'aurais un serv dédié et que je l'utiliserais avec Papache pour mon site § Par contre, j'édite le premier post pour ajouter #papache, où on peut se renseigner sur les dernières versions (pour se mettre à jour).

Image utilisateur Image utilisateur
 
Hors ligne K-Phoen # Posté le 08/06/2008 à 20:23:39
Geek un jour, geek toujours !
Avatar
Groupe : Membres
Citation : Krankkatze
J'ai pas de budget informatique :-°

Sinon, j'ai pas de svn, sinon ça voudrait dire que j'aurais un serv dédié


Faux :p
Beanstalk est ton ami ;)

Pour ce qui est de Papache, je compte bien suivre de près son développement de manière à parfaire mes connaissances en Python et serveur web, et pourquoi pas - un jour peut-être - contribuer d'une manière ou d'une autre à ce projet (on peut toujours rêver :p )

P.S : Code : Python
1
2
x = 1 # Variable pour la boucle infinie
while x==1:


pourquoi ne pas faire tout simplement while 1: ?
Et oui, je sais, c'est un micro-détail :-°
 
Hors ligne Dr.Zooix # Posté le 08/06/2008 à 21:22:01
F34r the fuN...
Avatar
Groupe : Membres
Salut,

Je tenais à te féliciter pour ce projet. Le server à l'air performant et bien codé. Mais je n'ai pas trop approfondi. SI tu veux de l'aide, n'hésites surtout pas à me MP, j'ai du temps libre en ce moment :) .

Je commence tout juste en Io pas taper...

Perl | Haskell | Erlang

 
Hors ligne Krankkatze # Posté le 08/06/2008 à 22:26:42
Ob-la-di, Ob-la-da
Avatar
Groupe : Membres
K-Phoen, ça fait partie du code que j'ai codé quand je codais en Python comme en C :-°
Je vais m'empresser de le corriger. Sinon, sache que si tu veux participer, tu peux t'y mettre dès maintenant :p
Tout s'organise sur #papache, donc venez en masse, il me reste 4 autovoices à distribuer §
Édité le 08/06/2008 à 22:37:48 par Krankkatze

Image utilisateur Image utilisateur
 
Hors ligne K-Phoen # Posté le 08/06/2008 à 22:55:10
Geek un jour, geek toujours !
Avatar
Groupe : Membres
Proposition très alléchante, mais je préfère être certain de ne pas ralentir l'avancement du projet avant de m'y joindre =)

En attendant, j'essaierai de passer de temps en temps sur le chan :D

Edit : après avoir rapidement parcouru le code, et brièvement testé le serveur, j'ai repéré une petite erreur d'étourderie : dans les logs, le Referer indique la même info que le User-Agent.
L'erreur doit très probablement venir de la fonction generer_log(), et plus précisément de la ligne 280.
log_texte += "Referer: "+programme_client+"\n" devrait en fait être log_texte += "Referer: "+provenance+"\n" ;)

Ensuite, on pourrait remplacer les if chemin_log == "": par des if not chemin_log: (ça serait quand même un peu plus moins pas beau nan ? :p )

Sur ce, je vais dodoter, et je commencerai à m'y mettre sérieusement demain (kewl, je vais enfin pouvoir mettre à profit la fin des cours ^^)
Édité le 08/06/2008 à 23:38:35 par K-Phoen
 
Hors ligne Krankkatze # Posté le 11/06/2008 à 13:52:50
Ob-la-di, Ob-la-da
Avatar
Groupe : Membres
Merci pour tes conseils. Je suis en train (comme ceux qui sont sur #papache le savent :-°) de retravailler tout le code qui est truffé de ce genre de choses. Ah, et j'édite le premier post pour mettre le super logo :-°

Image utilisateur Image utilisateur
 
Hors ligne Dr.Zooix # Posté le 11/06/2008 à 16:14:52
F34r the fuN...
Avatar
Groupe : Membres
Excellent le logo, j'accroche. Je passe bientôt sur IRC ne t'inquiètes pas ^^ .

Je commence tout juste en Io pas taper...

Perl | Haskell | Erlang

 
Hors ligne K-Phoen # Posté le 12/06/2008 à 20:17:34
Geek un jour, geek toujours !
Avatar
Groupe : Membres
Krankkatze et Papache m'ayant donné des idées, je me suis moi aussi mis au développement d'un serveur HTTP en Python :p

Ceux qui liront mon code le verront, le serveur et ses fonctionnalités sont hyper basiques, mais ça suffit largement pour apprendre les grandes lignes du fonctionnement du protocole HTTP, ce qui est le but premier de mon script. Cependant, il est plus que probable que de nouvelles fonctions soient implémentées dans les prochains jours :-°

J'ajouterai que si je poste mon script ici, ce n'est nullement pour concurrencer Papache, mais plutôt pour avoir l'avis et les conseils de développeurs Python plus expérimentés que moi (ce qui ne devrait pas être bien difficile à trouver étant donné que je code en python depuis ~ deux semaines :lol: )

Donc voilà, pour ceux qui seraient prêts à perdre quelques instants à lire mon code, vous pourrez le trouver ici

Merci d'avance,
K-Phoen

P.S : pour tester le serveur, éditez le fichier server.py pour mettre les valeurs qui correspondent à vos besoins pour le répertoire contenant les pages web (clé "home_www" dans le dico "config"), et le répertoire contenant le serveur (clé "install_path" dans le même dico).
Ces valeur devraient disparaître dans les prochains jours, je compte revoir la gestion de la configuration :)
Il suffit ensuite de faire python server.py pour lancer le serveur.
 
Hors ligne kedare # Posté le 13/06/2008 à 02:44:24
I Hate PHP
Avatar
Groupe : Membres
Quelles sont les differences avec Cherrypy ?

"Toute technologie suffisamment avancée est indifférenciable de la magie" Arthur C. Clarke, “Profil de l’avenir”, 1961
Pseudo PSN: Kedare
Code Mii: 8684 6147 7730 6877

dev.Kedare Blog
 
Hors ligne K-Phoen # Posté le 13/06/2008 à 13:02:34
Geek un jour, geek toujours !
Avatar
Groupe : Membres
En ce qui me concerne, CherryPy est sûrement plus complet et mieux codé que ce que j'ai fait. Donc la principale différence serait que mon code n'a qu'un but "éducatif" (je ne compte pas pour le moment l'utiliser en prod), alors que CherryPy pourrait être utilisé sur un serveur.
 
Hors ligne Krankkatze # Posté le 15/06/2008 à 00:48:22
Ob-la-di, Ob-la-da
Avatar
Groupe : Membres
J'ai mis en place un Trac pour remplacer tout le bazard avec la doc, les sources et tout le reste mal rangé. Il est accessible ici.
Sinon, la 1.0 est sortie en beta : le code a été réécrit plus proprement, la CGI repensée et quelques options de configuration ajoutées.

Image utilisateur Image utilisateur
 
Hors ligne Natim # Posté le 16/06/2008 à 09:49:02
En stage chez Simple It
Avatar
Admins
Ben le voilà le SVN que je demandais :p
Merci :)

from sdz.vt35.bugs import correction
Python IRC sur Epiknet
@ bientôt Natim
Status Jabber : Image utilisateur Image utilisateur
Zenwalk-fr.org
 
Hors ligne Florestan # Posté le 19/06/2008 à 10:54:37
Groupe : Membres
C'est une très bonne idée, mais j'ai un peu regardé ton code et ... cela n'utilise pas les fonctionnalité objets, et ce n'est quasiment pas structuré o_O
C'est peut-être un choix, mais quand même faire du python sans faire de POO ?
Tu auras beaucoup moins de mal à maintenir et a améliorer ton code si tu le structures en classe.
Édité le 19/06/2008 à 10:56:39 par Florestan
Hors ligne Krankkatze # Posté le 19/06/2008 à 21:42:51
Ob-la-di, Ob-la-da
Avatar
Groupe : Membres
J'ai pas réussi à faire marcher le SVN moi :-°

Pour la POO, en fait, je vais re-revoir le code prochainement, mais je trouve pas qu'il y aie assez de fonctions, variables etc... pour aller m'embêter avec des self.machin ...

Image utilisateur Image utilisateur
 

Retour au forum "Autres langages" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | Fil RSS | XHTML 1.0 | CSS 2.0
Édité par Simple IT SARL : Nous contacter | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 455 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.1752s (0.1538s)