有許多不同的Python框架可用于開發不同的Python應用。如果是Web應用,可以使用Django(<https://www.djangoproject.com/>)、Pylons(<http://www.pylonsproject.org/>)、TurboGears(<http://turbogears.org/>)、Tornado(<http://www.tornadoweb.org/>)、Zope(<http://www.zope.org/>)或者Plone(<http://plone.org/>)。如果你正在找事件驅動的框架,可以使用Twisted([http:// twistedmatrix.com/](http://twistedmatrix.com/))或者Circuits(<https://bitbucket.org/prologic/circuits/>)等。
框架和外部庫的主要不同在于,應用程序是建立在框架之上的,代碼對框架進行擴展而不是反過來。而外部庫更像是對代碼的擴展,賦予你的代碼更多額外的能力,而框架會為你的代碼搭好架子,只需要通過某種方式完善這個架子就行了,盡管這可能是把雙刃劍。使用框架有很多好處,如快速構建原型并開發,但也有一些明顯的缺點,如鎖定(lock-in)問題。因此,在決定使用某個框架前需要把這些都考慮在內。
這里推薦的為Python應用選擇框架的方法很大程度上類似于前面介紹過的外部庫的選擇方法,適用于框架是通過一組Python庫來進行分發的情況。有時它們還包含用于創建、運行以及部署應用的工具,但這并不影響你采用的標準。前面已經提到過,在已經寫了大量代碼之后更換外部庫是十分痛苦的,但更換框架比這還要難受1000倍,因為通常需要完全重寫你的應用程序。舉例來說,前面提及的Twisted框架還不能完全支持Python 3。如果你基于Twisted的程序在幾年之后想要支持Python 3,那么你將非常不幸,除非全部重寫代碼選用另一個框架或者有人最終為Twisted提供了Python 3的升級支持。
有些框架與其他框架相比更加輕量級。一個簡單的比較就是,Django提供了內置的ORM功能,而Flask則沒有。一個框架提供的功能越少,將來遇到的問題越少。然而,框架缺少的每個功能同時也是另一個需要去解決的問題,要么自己寫,要么再千挑萬選去找另一個能提供這個功能的庫。愿意處理哪種場景取決于個人的選擇,但需慎重選擇。當問題出現時從一個框架升級至其他框架是極其艱巨的任務,就算Python再強大,對于這類問題也沒有什么好辦法。
- 內容提要
- 中文版序
- 前言
- 第1章 項目開始
- 1.1 Python版本
- 1.2 項目布局
- 1.3 版本編號
- 1.4 編碼風格與自動檢查
- 1.5 Joshua Harlow訪談
- 第2章 模塊和庫
- 2.1 導入系統
- 2.2 標準庫
- 2.3 外部庫
- 2.4 框架
- 2.5 Doug Hellmann訪談
- 第3章 管理API變化
- Christophe de Vienne訪談
- 第4章 時區陷阱
- 第5章 文檔
- 5.1 Sphinx和reST入門
- 5.2 Sphinx模塊
- 5.3 擴展Sphinx
- 第6章 分發
- 6.1 簡史
- 6.2 使用pbr打包
- 6.3 Wheel格式
- 6.4 包的安裝
- 6.5 和世界分享你的成果
- 6.6 Nick Coghlan訪談
- 6.7 入口點
- 6.7.1 可視化的入口點
- 6.7.2 使用控制臺腳本
- 6.7.3 使用插件和驅動程序
- 第7章 虛擬環境
- 第8章 單元測試
- 8.1 基礎知識
- 8.2 fixture
- 8.3 模擬(mocking)
- 8.4 場景測試
- 8.5 測試序列與并行
- 8.6 測試覆蓋
- 8.7 使用虛擬環境和tox
- 8.8 測試策略
- 8.9 Robert Collins訪談
- 第9章 方法和裝飾器
- 9.1 創建裝飾器
- 9.2 Python中方法的運行機制
- 9.3 靜態方法
- 9.4 類方法
- 9.5 抽象方法
- 9.6 混合使用靜態方法、類方法和抽象方法
- 9.7 關于super的真相
- 第10章 函數式編程
- 10.1 生成器
- 10.2 列表推導
- 10.3 函數式函數的函數化
- 第11章 抽象語法樹
- 11.1 用抽象語法樹檢查來擴展flake8
- 11.2 Hy
- 11.3 Paul Tagliamonte訪談
- 第12章 性能與優化
- 12.1 數據結構
- 12.2 性能分析
- 12.3 有序列表和二分查找
- 12.4 namedtuple和slots
- 12.5 memoization
- 12.6 PyPy
- 12.7 通過緩沖區協議實現零復制
- 12.8 Victor Stinner訪談
- 第13章 擴展與架構
- 13.1 多線程的注意事項
- 13.2 多進程與多線程
- 13.3 異步和事件驅動架構
- 13.4 面向服務架構
- 第14章 RDBMS和ORM
- 14.1 用Flask和PostgreSQL流化數據
- 14.2 Dimitri Fontaine訪談
- 第15章 Python 3支持策略
- 15.1 語言和標準庫
- 15.2 外部庫
- 15.3 使用six
- 第16章 少即是多
- 16.1 單分發器
- 16.2 上下文管理器
- 第17章 延伸閱讀
- 版權信息
- 版權聲明
- 歡迎來到異步社區!
- 異步社區的來歷
- 社區里都有什么?
- 購買圖書
- 下載資源
- 與作譯者互動
- 靈活優惠的購書
- 紙電圖書組合購買
- 社區里還可以做什么?
- 提交勘誤
- 寫作
- 會議活動早知道
- 加入異步