37 votes

Recommandation pour les frameworks python simples

Bien que j'ai quelques années d'expérience de la création d'applications web en Java, j'ai pas vraiment fait beaucoup de développement web dans le plus léger de la LAMPE de style.

J'ai récemment pris python et je suis très content de ce que je vois jusqu'à présent, mais il n'y a pas un "évidents" choix en ligne de cadre à utiliser, comme il semble qu'il y a un certain nombre d'options.

Alors que j'aimerais avoir un joli cadre riche d'utilisation, je préfère un cadre qui était accessible plutôt que de celui qui "a fait beaucoup de code pour moi". Principalement parce que, si je puis avoir besoin de personnaliser quelque chose, j'ai besoin d'obtenir beaucoup de code réutilisable.

Alors au vu de cette pensée, quelle serait la meilleure option pour Python de développement web?

71voto

Nikhil Chelliah Points 3463

Full-stack cadres

Django, TurboGears, et Pylônes surtout avoir le sens de blocs de Lego, où les différentes applications peuvent être utilisées dans différents sites web très facilement, à l'aide de l'prescrit des outils pour la base de données, réseau, etc. Si vous aimez les applications actuellement en cours de développement (par exemple, Byteflow, Sphène d'Outils de la Communauté, ou Flatpages pour Django), alors il n'y a pas vraiment beaucoup de travail à faire.

Des trois, Django a été la première que j'ai essayé, et je suis devenu fou à la recherche de la plus banale des choses, comme le code de l'URL de la page qui a été rendue. Django est bien poli et il a une bonne documentation, mais il n'aime pas vous laisser atteindre un bas niveau d'abstraction. Il est également accusé d'être monolithique et avoir un NIH attitude, bien qu'il devient de plus en plus modulaire.

TurboGears est écrit sur CherryPy, des Pylônes est écrit sur la Pâte, et TurboGears 2 est en cours d'écriture sur des Pylônes. Les pylônes et les TurboGears sont très similaires philosophies: pour la plupart, ils disent utiliser le "best-of-breed" les bibliothèques. Cependant, ils ont été initialement créés à des moments différents, et l'état de bibliothèques Python considérablement changé entre les deux. Ainsi, les deux cadres sont essentiellement de la colle autour de solide bibliothèques, mais ils utilisent différents outils pour à peu près tout. Un bref aperçu:

  • TurboGears - CherryPy pour HTTP, Genshi (basé sur XML) pour les templates, SqlObject (plus simple) pour la persistance
  • Pylônes - Coller pour HTTP, Mako (plus rapide) pour les templates, SqlAlchemy (plus puissant) pour la persistance

Coller et les Pylônes sont conçu entièrement autour de WSGI. WSGI (liens: Wikipédia, PEP 333, WSGI wiki est une interface de bas niveau, qui est essentiellement une puissante sur-ensemble de CGI et de ses frères. Alors que la plupart des gens reconnaissent son utilité pour cadre les développeurs, il y a beaucoup de controverse quant à son utilité pour webapp développeurs, dont je tairai le lien ici.

Des deux, des Pylônes est probablement le meilleur choix, car il offre plus moderne composants. Le TurboGears communauté était divisée il y a un moment; je ne suis pas sûr de savoir comment ils sont en train de faire maintenant, mais ça va encore être chaotique jusqu'à ce que la transition vers TurboGears 2.

HTTP cadres

CherryPy, Coller, et peut-être web.py faire beaucoup de réseautage pour vous, mais, à peu de chose. Si vous souhaitez utiliser Jinja2, Genshi, Mako, le Guépard, ou tout autre moteur de template, vous aurez à intégrer vous-même. Et si vous souhaitez utiliser SqlAlchemy, Tempête, SqlObject, ou Dejavu pour les bases de données, vous devrez vous intégrer vous-même. L'avantage est que les données de bas niveau est juste en face de vous. Par exemple, dans CherryPy, l'obtention de la base de l'URL, la liste des témoins, et la liste des en-têtes est aussi simple que

cherrypy.request.base
cherrypy.request.cookie
cherrypy.request.headers

parce que CherryPy est donc pythonic. L' request est juste un objet qui possède tous ces attributs. De même, response est un objet de sorte que vous pouvez configurer le client de cookies avec des déclarations comme

cherrypy.response.cookie['cookieName'] = 'cookieValue'
cherrypy.response.cookie['cookieName']['expires'] = 3600

Coller (dont je n'ai pas utilisé en dehors de Pylônes) est plus lent et moins pythonic, mais il utilise WSGI exclusivement et est actuellement à prendre de l'élan. Le WSGI guerres ont mijoté depuis CherryPy 3 a été publié à la fin de 2006, l'ajout de mieux WSGI soutien; mais les deux philosophies de conception sont toujours opposées.

D'autres cadres

Il y a aussi Zope, le heavy-duty grand-père de Python cadres, et Plone, un système de gestion de contenu qui s'exécute au-dessus d'elle. Je n'ai pas utilisé un, mais Zope est généralement comparé à Java, frameworks web – bonne si vous êtes à la recherche d'une plate-forme fiable, mais pas très bon pour le développement rapide. Zope 3 a considérablement réduit la courbe d'apprentissage, mais la plupart des Pythoneers ont probablement évolué.

Il y a aussi Tordu, un niveau inférieur du cadre et de l'installation du serveur, et Nevow, une autre couche plus Tordu. Je ne connais pas assez pour en dire beaucoup plus, cependant.

Il y a vraiment beaucoup de choix là-bas; pour la grande majorité des utilisateurs, Django, Pylônes, et CherryPy offrir la meilleure couverture, et je me retrouve à aller d'avant en arrière entre eux pour chaque projet. Ma préférence personnelle est une installation personnalisée avec CherryPy, tout simplement parce que je n'aime pas la hiérarchie et de l'opacité qui full-stack cadres essayer d'appliquer. Pour vous, CherryPy sonne comme un bon pari, trop.

22voto

RazMaTaz Points 246

Alors que j'aimerais avoir une belle riche cadre d'utilisation, je préfère un cadre qui était accessible plutôt que celui qui "a fait beaucoup de code pour moi". Principalement parce que, si je puis avoir besoin de personnaliser quelque chose, j'ai besoin d'obtenir dans beaucoup de que passe-partout code.

En vertu de ce principe j'ai, comme d'autres personnes, vous recommande de regarder CherryPy. CherryPy est assez mature et léger, applications serveur, de nombreux "full stack cadres" (les plus connus: TurboGears, Pylônes) construire sur elle.

CherryPy environ compare à TurboGears/Pylônes comme Tomcat compare à Couture/RIFE/Guichet dans le monde java. Il les résumés de tous les nitty gritty HTTP détails auprès de vous et vous offre un environnement propre API pour mettre en oeuvre votre Page-Contrôleurs de contre. Comment nettoyer? Pour nettoyer:

import cherrypy

class HelloWorld:
    def index(self):
        return "Hello world!"
    index.exposed = True

cherrypy.quickstart(HelloWorld())

Qui a été un CP de l'application, vous pouvez l'exécuter et de le voir dans votre navigateur.

CP, viande maigre et signifie comme il est, attend de vous que vous savez ce que vous faites à un certain degré. Hors de la boîte, il ne vient pas avec un moteur de template, mais il est facile à intégrer avec l'un des nombreux excellents choix. Il ne va pas dans votre chemin avec toute sorte de pré-décidé abstraction de base de données, soit, mais sera heureux de travailler avec ce que la méthode de la persistance que vous préférez.

En bref: le CP n'est pas une clé en main de la solution, c'est un bloc de construction.

Un point faible au sujet de CherryPy est de la documentation, il est malheureusement assez faible et dépassé dans de nombreux domaines, qui peut être un hinderance pour les débutants. Mais la bonne nouvelle, c'est que, depuis qu'il est tellement simple et pythonic design, vous n'aurez pas besoin de la documentation bien après la phase d'apprentissage initiale. En outre CP soutenu par une communauté active qui sera généralement amical et serviable envers confondre les débutants, sur la liste de diffusion et sur IRC (#cherrypy sur OFTC).

Probablement le plus important point de vente de la nue-CP sur le plus de l'album, "full stack cadres" (django, TurboGears, Pylônes), c'est que vous aurez en fait être la rédaction de votre application en python, pas dans une suite de cadre des Api spécifiques, des annotations et de la sémantique. Avec CP, vous êtes libre de modèle de votre demande de la manière dont vous le souhaitez sans les contraintes et les "obligatoire meilleures pratiques" que les plus grands cadres de vous imposer.

14voto

Gareth Simpson Points 5905

Vos options sont, principalement:

  • Django qui est sur le point d'aller 1.0 et est probablement le "chef de file"
  • TurboGears qui, en dépit d'être sur le point d'aller 2.0, est sans doute moins matures.
  • web.py qui est seulement à 0,3 et ne semble pas être très fortement développé

J'ai tout utilisé et j'ai trouvé que web.py était celui que j'aimais le plus. Il fait moins pour vous, mais obtient également votre façon assez efficace de sorte que vous pouvez faire ce que vous avez besoin et rien de plus. Il est sans doute celle qui répond à vos accessibilité/non réutilisable exigences les meilleurs. Cela se fait au prix d'être (et de loin) les moins matures.

Turbogears et Django sont beaucoup de muchness (peut-être TurboGears juste ombragée de elle). La chose à savoir avec TurboGears est bien que c'est surtout beaucoup de colle pour lier ensemble beaucoup d'autres projets dans un cadre. Quand les choses vont mal, il peut souvent être dans un non-TG bibliothèque et (un peu) plus difficile de comprendre ce qui s est mal passé où et comment obtenir de l'aide. Django est un peu plus cohérent.

Voici la mise en garde cependant, je n'ai jamais déployé quelque chose de quelque importance avec eux. Tout ce que j'ai écrit a été un prototype ou un peu utilisé interne du système. Très bientôt, nous allons être à partir d'un beaucoup plus grand, projet externe et je pense que nous allons avoir à faire un appel sur la base duquel nous pensons être les plus stables et les plus faciles à garder performant. Les modèles de programmation sont assez proches entre les trois que ces critères seront les décideurs.

10voto

massimo Points 2362

Vous pouvez essayer de web2py (il gérer la session, les cookies, requête, réponse, le cache, l'internationalisation, les erreurs/billets, abstraction de base de données pour GAE, SQLite, MSSQL, MySQL, Postgres, Oracle, FireBird, etc.) Il n'a pas besoin d'installation il suffit de décompresser et de cliquer dessus et vous pouvez effectuer des travaux d'aménagement dans votre navigateur.

Voici une complète application qui compte de vos visites et fournit de l'internationalisation (T):

def index():
    session.c=session.c+1 if session.c else 1
    return dict(message=T("Hello (counter=%s)",session.c))

Il utilise une valeur par défaut générique point de vue, mais peut également définir votre propre:

{{extend 'layout.html'}}
<h1>{{=message}}</h1>

7voto

jeremiahd Points 2685

Personnellement, j'ai trouvé CherryPy être le plus facile à travailler avec la chauve-souris - il reste en dehors de votre chemin, et si vous utilisez python beaucoup, il va se sentir très naturel (au moins il a fait pour moi). J'ai trouvé que c'est un code facile à lire, ce qui est un atout majeur pour moi, si ce n'est trop rare avec les applis python.

Je l'ai trouvé le plus facile pour moi à l'échelle de la conception à la pleine application, dans la mesure du développement web va. Vous n'avez pas à vous soucier de rien, comme ce répertoire le cadre veut vous mettre vos fichiers par défaut, la configuration est simple, vous permet de gérer les templates et de telles que vous voulez. C'est le processus d'ajout de l'abstraction en cas de besoin dans les web-apps quand on a besoin de beaucoup plus simple pour moi, car je sais où tout mon application est en train de faire est juste au large de la chauve-souris.

(shameless plug: Si vous voulez un exemple d'une application web écrite en CherryPy, j'en ai un ici qui envoie des paquets d'Ubuntu et de leurs dépendances à l'utilisateur comme une tarfile. Ce n'est probablement pas un brillant exemple de code, mais c'est ~150 lignes de python, plus un peu de HTML et de telles à ce point dans le temps et fait quelque chose d'utile).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X