我很幸运能够完全控制我公司应用程序的架构,并且我决定废弃用Ruby / Rails编写的原型并在Python中重新开始。这有几个原因:我想学习Python,我更喜欢语法,我基本上说“F ** k it,让我们这样做。”
所以,请记住,这将是一个非常密集的应用程序,我想听听您对以下内容的看法:
API需要与Clojure应用程序接口来处理一些内部数据,并与消息队列接口,所以如果它不是Python,那么有一些库是很棒的。
TDD / BDD对我来说非常重要,所以测试越多越好!
阅读你对此的看法真的很有趣。非常感谢。
我最好,
杰米
答案 0 :(得分:29)
<强>框架强>
好的,所以我在这里有点偏颇,因为我目前大量使用Django并在伦敦组织Django用户组,所以在阅读以下内容时请记住这一点。
从Django开始,因为它是一种很棒的网关药物。大量的文档和文献,一个非常活跃的人们可以与之交谈的社区以及围绕网络的大量示例代码。
这完全是非技术性原因。 Pylons在Python哲学方面可能更纯粹(更多的是离散零碎的集合),但很多技术内容都是个人偏好,至少在你进入Python之前是这样。将Stack Overflow上非常活跃的Django标签与pylons或turbogears的标签进行比较,我认为使用Django可以更轻松地开始使用,而不管代码是什么。
我个人默认使用Django,但发现越来越多的时间我实际上选择使用更简单的微框架进行编写(想想Sinatra而不是Rails)。很多东西可供选择(好的清单,http://fewagainstmany.com/blog/python-micro-frameworks-are-all-the-rage)。我倾向于使用MNML(因为我写了部分内容并且它很小)但是其他的都是积极开发的。我倾向于为小型的,愚蠢的Web服务做这件事,然后将这些服务与Django项目串联在一起为中间人服务。
值得注意的是这里的内容。你必须在它的限制内工作,它不是为所有东西而设计的,但它是一个很好的方式来玩Python并获得一些东西并快速工作。它为学习和实验提供了一个很好的测试平台。
<强>蒙戈/ ORM 强>
在MongoDB前面,您可能首先要查看基本的python mongo库(http://api.mongodb.org/python/),看看它是否包含您需要的所有内容。如果你真的想要更多的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示例作为其文档的一部分。
Piston(http://bitbucket.org/jespern/django-piston/wiki/Home)是一个Django应用程序,它提供了许多用于构建API的工具。它的优点是非常活跃,维护良好,并且在各地都有生产。其他项目也存在,包括Dagny(http://zacharyvoase.github.com/dagny/),这是在Rails中创建类似于RESTful资源的早期尝试。
实际上,任何Python框架(甚至只是原始的WSGI代码)对于这类任务都应该相当不错。
<强>测试强>
Python将unittest作为其标准库的一部分,而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/)也很不错,它是一种“用于Web浏览的简单脚本语言”,因此非常适合某些功能测试。 Freshen(http://github.com/rlisagor/freshen)是Python的黄瓜港。我还没有在愤怒中使用它,但现在快速看一下它比我上次看的时候要好得多。
我实际上也使用Ruby进行Python应用程序和apis的高级测试,因为我喜欢快速和黄瓜的组合。但是我很奇怪,并且从其他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思考兔子。
<强>环境强>
无论你决定在Python生态系统中使用什么零碎,我都建议找到pip和virtualenv(http://clemesha.org/blog/2009/jul/05/modern-python-hacker-tools-virtualenv-fabric-pip/ - 请注意,结构也很酷,但不是必需的,这些文档已经过时了那个工具)。考虑使用没有gem,bundler或rvm的Ruby,你就会朝着正确的方向前进。
答案 1 :(得分:14)
好的,你可能犯了一个错误,就像我开始使用python时那样。
在你决定像django之类的东西之前,这是一个非常优秀的非典型的 python web框架,花一个晚上拥抱:
This,是一个好的开始。确保你A little Werkzeug watching,然后退房 一些经典的WebOb。也许,如果你感受到血液中的火焰,你可能会,wsgi有点瑕疵,但只有神灵,请查看Flask
我不是说使用它,Django也很漂亮,但是如果你不了解python,而你通过django,你就冒着学习框架的风险。
WSGI非常直截了当。你会发现Paste,Pastescript和Pylons。
然后,做出决定。学习做骨头wsgi或Flask的东西,比如变量赋值,使用解释器,样式关注点,测试,3个文件几晚,而不是django会更容易。住2晚。然后你会看到python web框架之间的巨大相似性,而不是差异。天啊,你甚至可以和Flask一起滚动。
只是一些建议,我用红宝石做同样的事情,通过Rails进行,并且......好吧,说的话很强烈。
语言,然后是基本的wsgi和测试,然后选择你的框架并滚动
答案 2 :(得分:4)
我自己是python的新手,并计划今年更加深入了解它。我在这方面有一些错误的开始,但总是专业需要让我回到PHP。我做过一些开发的几次,我已经用 web2py 作为python框架了。它做得很好,功能齐全,同时仍然非常轻巧。数据库层似乎非常灵活和成熟。
关于TDD / BDD以及其他问题,我对python选项没有任何经验,但有兴趣听听其他人说的话。
答案 3 :(得分:0)
我正在使用基于Twisted Framework的Nevow库来创建基于python的Web应用程序。
您的所有标准都适用于此单一框架。