2013-05-01 59 views
3

由於一個月前我開始學習Python,並且我覺得這個語言簡單而有用。關於尋找支持py3k的Python web框架的建議?

我是一名Web開發人員,但我只有PHP使用經驗,我使用過CakePHP或Zend等框架。我熟悉Django,它是最流行的一個。但是,Django與Python 3不兼容。

有人知道支持Python 3的Python web框架嗎?我應該考慮使用純Python,沒有框架?如果是好主意,我應該使用哪個網絡服務器? Nginx的反向代理如uwsgi或Gunicorn,爲什麼?

+0

@CppLearner,謝謝你提高我的語法:) – 2013-05-02 00:46:25

+0

嗨。沒問題。我有語法問題,但我只是編輯它,所以它有點可讀。 :P – CppLearner 2013-05-03 00:36:40

回答

5

的Django的最新的穩定版本是1.5,它支持Python的3。請仔細閱讀公告:https://docs.djangoproject.com/en/dev/topics/python3/

的Django 1.5是Django的的第一個版本支持Python 3所以你可以期待比以前的版本更多的bug這對Python 2的支持非常穩定。但是Django核心團隊非常認真地關注從社區合併補丁,所以它不應該太大。

一般來說,你有三個更着名的Python網絡框架:燒瓶,瓶子和金字塔。前兩個目標是極簡主義。 Bottle只是一個Python文件。我可以放心地說,Bottle只是通過添加路由功能而成爲WSGI服務器上的包裝。這是非常多的。如果您想要最少的功能並從頭開始構建一切,請使用Bottle。這通常適用於非常輕量級的API Web服務。

燒瓶是新的着名的老兄站出來。它比瓶子重,但仍然非常簡約。金字塔通常是Django的直接競爭對手。金字塔沒有ORM或硬整合模板引擎。默認情況下,您可以使用Mako或Chameleon來構建前端模板。沒有ORM意味着你不僅僅限於關係數據庫。 Django的ORM是對象關係映射器,所以它綁定到像MySQL,PostgreSQL或MariaDB或其他RDMB這樣的關係數據庫。如果你想使用非關係型(NoSQL)的MongoDB,那麼你就非常麻煩。你不能從使用Django的ORM中受益。金字塔允許您在Django中使用SQLAlchemy或其他ODM(NoSQL的對象文檔映射器),而不是使用硬集成的ORM。

使用Python 3在這一點上任何的Python Web框架的問題是,大多數Python的Web框架的生態系統(無論是Django的生態系統,瓶的,金字塔的)不與Python 3.許多最流行的兼容Django應用程序並不聲稱支持Python 3,所以如果您想使用這些應用程序來構建您的Django網站,您將會失去運氣。

但是,1.5我認爲生態系統將迅速轉移到Python 3兼容支持。 如果您足夠熟悉Python,請查看Flask或Pyramid。我喜歡Pyramid,因爲它帶有可以採用的Auth策略。我們一直在使用金字塔來建立我們的web api服務。如果你構建一個前端,Django是很好的。我仍然會將我的API webservice留在Pyramid或Flask中。

一般來說,你應該避免Apache + mod_wsgi。大多數人不知道如何調整Apache來高效運行。默認情況下,Nginx會爲您提供高吞吐量和高效的工作CPU內存消耗。是。我建議使用Gunicorn。

你是什麼意思純Python?所有的Web框架都是用Python構建的。那麼我可以得到一些細節,大多數人使用的Python叫做CPython。還有其他的Python實現。 Python語言的實現可以使用C,C++,Java,Ruby,.NET甚至PHP。 CPython是C.爲了讓你感到困惑,有一個Python編程語言「PyPy」的實現,它實現了Python中的Python語言。

好的。讓我完成這一點:這可能不是你所指的。如果你想自己構建一個Web框架,那很好。你只需要瞭解WSGI是如何工作的,讓一個正則表達式中間件根據URL來查看請求,然後你就完成了。這實際上都是現代Python Web框架的需求。我上個學期寫了一篇假文章(儘管可怕)。

+0

有人可能會說「純粹的Python」是不正確的,但我在談論使用python沒有框架,寫我自己的庫,但是,你理解我的問題完美,你的答案是偉大的:)再次感謝你。 – 2013-05-02 00:54:00

+0

沒問題。任何時候。 – CppLearner 2013-05-03 00:37:26