2010-06-29 19 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