2010-06-29 59 views
18

我很幸运能够完全控制我公司的应用程序的体系结构,并决定放弃使用Ruby/Rails编写的原型,并重新开始使用Python。这是因为几个原因:我想学习Python,我更喜欢语法,而我基本上说过“F ** k it,让我们来做吧”。从头开始构建Python:使用什么?

所以,在思路中披露将是一个非常密集的应用程序,我想听听以下的观点:

  • 通用的Web框架
  • ORM /数据库层(也许是为了与MongoDB的工作)
  • 的RESTful API瓦特/的OAuth/XAuth认证
  • 测试/ BDD支持
  • 消息队列(我想如果可能的话把这个在Python)

API将需要与Clojure应用程序接口来处理一些内部数据内容,并与消息队列进行接口,因此如果它不是Python,那么拥有一些库会很棒。

TDD/BDD对我来说非常重要,所以测试越多越好!

阅读你的想法真的很有意思。非常感激。

我最好的,

杰米

回答

29

框架

OK,所以我有点偏见这里我目前广泛使用的Django和组织在伦敦的Django用户组阅读以下内容,以便时记住这一点。

从Django开始,因为它是一个伟大的门户药物。许多文档和文献,与人交谈的非常活跃的社区以及大量网络示例代码。

这完全是非技术原因。在Python哲学方面,主塔可能是更纯粹的(更多的是离散的小块和小块的集合),但许多技术性的东西都是个人偏好,至少在你更多地使用Python之前。将堆栈溢出中非常活跃的Django标签与挂架或涡轮机的标签进行比较,我认为Django开始使用起来更简单,不管代码如何。

个人而言,我默认为Django,但发现我选择使用更简单的微型框架(认为Sinatra而不是Rails)的时间越来越长。很多东西可供选择(这里的好榜单,http://fewagainstmany.com/blog/python-micro-frameworks-are-all-the-rage)。我倾向于使用MNML(因为我写了部分内容,而且很小),但其他一些则是积极开发的。我倾向于这样做的小型,愚蠢的Web服务,然后与中间服务人员的Django项目串在一起。

值得注意的是appengine。你必须在它的限制内工作,它不是为一切设计的,但是它是一个很好的方式来使用Python并快速开始工作。它为学习和实验提供了一个很好的测试平台。

蒙戈/ ORM

在你可能会想看看基本的蟒蛇蒙戈库(http://api.mongodb.org/python/)先来看看它是否有你需要的一切MongoDB的前面。如果你真的想要一些更像ORM的东西,那么mongoengine(http://hmarr.com/mongoengine/)可能就是你要找的东西。一群人也在努力使Django专门与nosql后端更加无缝集成。其中一些是针对未来的Django发布的,但是django-norel(http://www.allbuttonspressed.com/projects/django-nonrel)现在有代码。

对于关系数据SQLAlchemy(http://www.sqlalchemy.org/)是很好的,如果你想独立的东西。如果您使用Django,Django的ORM也非常出色。

API

最官方的Oauth库中的python-的oauth2(http://github.com/simplegeo/python-oauth2),它轻而易举地拥有一个Django例如,作为它的一部分的文档。

活塞(http://bitbucket.org/jespern/django-piston/wiki/Home)是一个Django应用程序,它提供了大量用于构建API的工具。它的优点是非常活跃,维护良好,并在各地生产。其他项目也存在,包括Dagny(http://zacharyvoase.github.com/dagny/),这是一个早期尝试在Rails中创建类似于RESTful资源的东西。

实际上,任何Python框架(甚至只是原始的WSGI代码)对于这类任务都应该是合理的。

测试

Python有单元测试作为其一部分的标准库,并unittest2在Python 2.7(但回迁到以前的版本太http://pypi.python.org/pypi/unittest2/0.1.4)。有些人还喜欢Nose(http://code.google.com/p/python-nose/),这是一个替代测试跑步者,有一些额外的功能。斜纹(http://twill.idyll.org/)也很好,它是“一种简单的网页浏览脚本语言”,所以对于一些功能测试非常方便。清新(http://github.com/rlisagor/freshen)是一个黄瓜到Python的港口。我还没有全身心地使用这种方式,但现在快速查看表明它比上次查看时好得多。

我实际上也使用Ruby来进行Python应用程序和apis的高级测试,因为我喜欢celerity和黄瓜的组合。但是我很奇怪,并且从其他Python人那里看起来很有趣。

消息队列

对于一个消息队列,我使用,我现在总是使用RabbitMQ的任何语言。过去我曾经在stompserver上取得过一些成功,但Rabbit非常棒。不要担心它本身不是用Python编写的,PostgresSQL,Nginx或MongoDB都不是 - 所有这一切都是有原因的。你关心的是可用的库。你在这里找的是py-amqplib(http://barryp.org/software/py-amqplib/),它是一个低级别的库,用于谈论amqp(与兔子以及其他消息队列交谈的协议)。我还使用了Carrot(http://github.com/ask/carrot/),它更容易入门并提供更好的API。如果你熟悉Ruby,可以考虑Ruby的兔子。

环境

无论星星点点你决定从Python的生态系统,我建议前往谁咬破的virtualenv(http://clemesha.org/blog/2009/jul/05/modern-python-hacker-tools-virtualenv-fabric-pip/使用 - 注意,面料也很酷,但不是必要的,这些文档是在该工具上过时)。想想如果使用没有gem,bundler或rvm的Ruby,你就会走向正确的方向。

+0

我会提到[扩建](http://buildout.org)作为替代VIRTUALENV。海事组织解决了同样的问题,给你更多。我花了几个月的时间,但最后,'bin/buildout'给了我独立的库,我选择的interp,以及一个可重定位和部署的构建系统。 – chiggsy 2010-07-27 12:27:44

+3

我强烈推荐Flask作为web开发框架。一探究竟。 – 2010-07-29 18:04:12

4

我是新来的蟒蛇自己,并计划在今年得到更深入的与它。我已经有了一些虚假的开始,但总是有专业的需求让我回到PHP。几次我做了一些开发,我已经有了很好的体验web2py作为一个python框架。它做得非常好,功能齐全,但仍然非常轻巧。数据库层似乎非常灵活和成熟。至于TDD/BDD和其他问题,我没有任何Python选项的经验,但有兴趣听听别人说什么。

0

我正在使用Twisted Framework基于Nevow库的基于python的web应用程序。

所有的标准都适合这个单一的框架。

+0

如果你之前完成过网络编程,那么Nevow的'模板语言'就很糟糕 - 基本上它涉及[用Python代码编写HTML](http://divmod.org/trac/wiki/DivmodNevow/TutorialTwo)。如果你坚持使用Twisted并想使用现代框架,我推荐[Cyclone](http://github.com/fiorix/cyclone)。它是在Tornado之后建立的,它是一个WSGI风格的应用程序,但基于Twisted构建,它具有用于MongoDB之类的异步库。 – 2010-07-27 01:58:20

14

好吧,你可能犯了一个错误,这与我在开始使用python时犯的错误是一样的。

在你决定像Django的事情,这是一个很好的,但非典型蟒蛇Web框架,花一个晚上拥抱了:

This,是一个良好的开端。确保你做A little Werkzeug watching,然后检查出 一些经典的WebOb。也许吧,如果你觉得在血液中的火,你可能,WSGI是有点瑕疵,但只有神灵,看看Flask

我不是说使用它,Django是太漂亮,但如果你不知道python,并且你经历了django,你冒着学习框架的风险。

WSGI非常简单。你会发现关于粘贴,和Pastescript,和塔。

然后,做出您的决定。学习使用裸露的骨骼wsgi或Flask,诸如变量赋值,使用解释器,样式问题,测试3个文件几个晚上的东西,而不是django会容易得多。需要2晚。然后你会看到python web框架之间的巨大相似性,而不是差异。地狱,你甚至可能会与Flask一起滚动。

只是一些建议,我用红宝石做了同样的事情,通过Rails进入,...以及强烈的话说。

语言,那么基本的WSGI和测试,然后选择你的框架和滚动

+1

实际上这是非常好的建议,谢谢。我实际上是在和Django一起学习Python--我在Django之外使用它来做其他一些事情。 – 2010-07-27 11:32:28