參考:Top 13 Python Web Frameworks to Learn in 2020 (steelkiwi.com) 和 Top 15 Best Python REST API Frameworks (2021) | RapidAPI。
全??蚣?/h2>
Django
Official Website | GitHub | PyPI
Django 是一個免費的開源全棧 Python 框架。默認(rèn)情況下,它嘗試包含所有必需的功能,而不是將它們作為單獨的庫提供。Django 的一些示例性功能是其 authentication, URL routing, template engine, object-relational mapper (ORM), 和 database schema migrations(Django v.1.7 +)。
這些功能使 Django 具有高度的可擴展性,快速和極其靈活的功能。
Django 使用其 ORM 將對象映射到數(shù)據(jù)庫表。相同的代碼可用于不同的數(shù)據(jù)庫,并且不難從一個數(shù)據(jù)庫轉(zhuǎn)移到另一個數(shù)據(jù)庫。Django 使用的主要數(shù)據(jù)庫是 PostgreSQL, MySQL, SQLite 和 Oracle,但是第三方驅(qū)動程序也允許您使用其他數(shù)據(jù)庫。
使用 Django,您可以制作從小型項目到復(fù)雜網(wǎng)站的任何Web應(yīng)用程序。憑借其靈活性,Django 也可用于制作MVP,從而使初創(chuàng)公司能夠優(yōu)化其時間和預(yù)算。
Django 的用戶群有望增長,因為許多開發(fā)人員認(rèn)為此框架是新興技術(shù)(如機器學(xué)習(xí))的最佳選擇。 另外,在2020 年,Django 社區(qū)計劃發(fā)布更多庫以滿足不斷增長的需求。
Pyramid
Official Website | GitHub | PyPI | Awesome
Pyramid 是一個基于 Python 的開放源代碼,也是第二個值得注意的 Web 應(yīng)用程序框架。它的目標(biāo)是以最小的復(fù)雜度來盡可能多地做。Pyramid 在 Python 3 上運行,緊跟技術(shù)進步。Pyramid 1.10 是框架的當(dāng)前版本,并且是自 2010 年以來的第十次更新。
Pyramid 的最顯著特征是它在大型和小型應(yīng)用程序中都能很好地工作。Pyramid 的一些出色功能包括:
- Single-file applications
- URL generation
- Extensible configuration
- All-embracing templating and asset specifications
- Flexible authentication and authorization
- Testing, support, and comprehensive data documentation
- View predicates and many per-route views
- Function decorators
- Predicates
- Renderers
使用 Pyramid,開發(fā)人員可以決定模板語言,生成庫和數(shù)據(jù)庫層。
金字塔社區(qū)很活躍,并且發(fā)布了許多版本。 開發(fā)人員可以通過加入IRC官方頻道或加入Google和Twitter組來關(guān)注框架的進展。
TurboGears
Official Website | GitHub | PyPI
TurboGears 是一個開源的,數(shù)據(jù)驅(qū)動的全棧Web應(yīng)用程序框架。它建立在許多中間件和許多庫的基礎(chǔ)上,最初旨在結(jié)合其他 Python 框架的最佳組件。
TurboGears 使您可以快速開發(fā)可擴展的數(shù)據(jù)驅(qū)動的Web應(yīng)用程序。它帶有一個用戶友好的模板引擎以及一個強大而靈活的ORM。除了使設(shè)計師的工作更輕松的出色模板系統(tǒng)外,TurboGears 還提供了很多靈活性,強大的聚合支持,強大的ORM和可重復(fù)使用的代碼段。
TurboGears的一些獨特功能包括:
- Multi-database support
- MVC-style architecture
- Support for SQLObject and SQLAlchemy
- Kid and Genshi included in preferred templating languages
- Validation with FormEncode
- Pylons as a web server
- ToscaWidgets, an application library that simplifies coordination of frontend design and server development
- PasteScript templates
- Front-facing WSGI-based servers (Paste HTTP server, CherryPy WSGI/HTTP server, etc.)
- Command-line tools
- MochiKit JavaScript library integration
- All features implemented as function decorators
至于TurboGears的未來,該社區(qū)目前正在努力改善框架的功能和整體穩(wěn)定性,并即將發(fā)布“最小代碼”。 該代碼也稱為微框架或TurboGears的精簡版本。 最少的代碼將幫助開發(fā)人員更快地構(gòu)建應(yīng)用程序,從而節(jié)省金錢和時間。
Web2py
Official Website | GitHub | PyPI
Web2py 是可擴展的開源全棧 Python 框架。在處理數(shù)據(jù)方面,它非常強大。Web2py 最初是作為教學(xué)工具提供的,重點是易用性。這解釋了為什么沒有項目級配置文件。
不過,Web2py 的優(yōu)點是它帶有自己的基于 Web 的 IDE,其中包括代碼編輯器,調(diào)試器和一鍵式部署。
Web2py 的其他重要功能包括:
- No requirements for installation and configuration
- Ability to run on Windows, Mac, Linux/Unix, Google App Engine, Amazon EC2, and any web hosting that supports either Python 2.5–2.7 or Java+Python
- Readability of multiple protocols
- Data security that prevents such vulnerabilities as cross-site scripting, injection flaws, and malicious file execution
- Successful employment of software engineering practices, making code easy to read and maintain
- Error tracking, thorough error logging and ticketing
- Role-based access control
- Support for internationalization
- Backward compatibility that ensures user-oriented advancement without the need to lose ties with earlier versions
票務(wù)系統(tǒng)是Web2py的主要功能。每當(dāng)發(fā)生錯誤時,它都會發(fā)出票證。這樣,用戶可以跟蹤錯誤及其狀態(tài)。
盡管有所有這些優(yōu)點,但Web2py社區(qū)比Pyramid或Django的社區(qū)小。沒有多少開發(fā)人員正在使用它。這意味著獲得支持的機會更低。另外,官方郵件列表不是很活躍。
Microframeworks
微框架或簡約的Web應(yīng)用程序框架缺少完整框架的大多數(shù)功能,例如Web模板引擎,身份驗證功能,帳戶,授權(quán),輸入驗證和輸入環(huán)境衛(wèi)生。微框架試圖僅提供構(gòu)建應(yīng)用程序所需的組件集。它還可能專注于為一個特定領(lǐng)域提供必要的功能。
Flask
Official Website | GitHub | PyPI | Awesome
Flask 是 BSD 許可下可用的 Python 框架。它的靈感來自 Sinatra Ruby 框架。Flask 依賴于Werkzeug WSGI toolkit和Jinja2模板。
Flask的主要思想是幫助建立堅實的Web應(yīng)用程序基礎(chǔ)。從那里,您可以使用可能需要的任何擴展。Flask被選擇用于所有項目。實際上,對于任何與Django不匹配的網(wǎng)絡(luò)項目,這都是默認(rèn)選擇。
Flask的輕巧和模塊化設(shè)計使其可以輕松適應(yīng)開發(fā)人員的需求。它包括許多有用的即用型功能:
- Built-in development server and a fast debugger
- Integrated support for unit testing
- RESTful request dispatching
- Jinja2 templating
- Secure cookies support (client-side sessions)
- WSGI 1.0 compliance
- Unicode-based
- Ability to plug in any ORM
- HTTP request handling
自 2010 年推出以來,F(xiàn)lask 已更新了27次。迄今為止,它仍然是增長最快的 Python 框架。但是,不再支持許多 Flask 擴展程序:文檔已過時,不再開發(fā)。如果遇到這種情況,則需要 Google 查找具有類似功能的受積極支持的插件。
Bottle
Official Website | GitHub | PyPI
Bottle是一個微框架。Bottle 最初是為了構(gòu)建 API 而設(shè)計的,它在單個源文件中實現(xiàn)了所有功能。除了 Python 標(biāo)準(zhǔn)庫外,它沒有依賴項。與任何完整堆??蚣苓M行編碼相比,使用 Bottle 進行編碼使您與金屬更接近。但是,只有在您制作的應(yīng)用程序非常小且最多有 500 行代碼且沒有特殊要求時,Bottle才是匹配項。
它的默認(rèn)功能包括路由,模板,實用程序以及基于 WSGI標(biāo)準(zhǔn)的基本抽象。
- Routing – supports requests to function-call mapping, allowing you to achieve clean and dynamic URLs
- Templates – a fast and Pythonic template engine out of the box along with full support for mako, jinja2, and cheetah
- Utilities – comfortable access to form data, file uploads, cookies, headers, and other HTTP-related metadata
- Server – a built-in HTTP development server that supports fapws3, bjoern, GAE, СherryPy, and any other WSGI-capable HTTP server
自2009年以來,Bottle已進行了73次更新,現(xiàn)在它是用于原型設(shè)計,學(xué)習(xí)網(wǎng)絡(luò)框架的組織以及構(gòu)建簡單的個人應(yīng)用程序的完美解決方案。
對Bottle社區(qū)的任何貢獻都可以通過GitHub接受。用戶還可以加入Bottle郵件列表和博客,并關(guān)注Twitter上的最新更改。如果您正在尋找其他論壇進行討論,請加入freenode聊天。
CherryPy
Official Website | GitHub | PyPI
CherryPy 是一個開放源代碼的簡約Web框架。它使構(gòu)建Python Web應(yīng)用程序與構(gòu)建任何其他面向?qū)ο蟮某绦驔]有什么不同。
CherryPy 被創(chuàng)建為可擴展的。該框架甚至提供了用于掛鉤點和擴展的機制。例如,基于 CherryPy 的Web應(yīng)用程序是一個獨立的 Python 應(yīng)用程序,它嵌入了自己的多線程 Web 服務(wù)器。借助自己的Web服務(wù)器,擴展點包括請求-響應(yīng)周期之外的功能,從而增加了 CherryPy 的可擴展性。
實際上,基于 CherryPy 的 Web 應(yīng)用程序是一個獨立的 Python 應(yīng)用程序,它嵌入了自己的多線程 Web 服務(wù)器。CherryPy 應(yīng)用程序可在支持 Python 的任何操作系統(tǒng)(Windows,macOS,Linux等)上運行。它們可以部署在可以運行普通 Python 應(yīng)用程序的任何位置。CherryPy 應(yīng)用程序不需要 Apache,但是您可以在 Apache 后面運行 CherryPy 應(yīng)用程序,就像在Lighttpd 或者 IIS后面運行它一樣。
CherryPy 并不是一個非常有限的框架,因為它允許您使用任何類型的技術(shù)進行模板,數(shù)據(jù)訪問等。但是,它仍然可以處理會話,靜態(tài)數(shù)據(jù),Cookie,文件上傳以及網(wǎng)絡(luò)框架通??梢詧?zhí)行的所有其他操作。
CherryPy的一些默認(rèn)功能包括:
- An HTTP/1.1-compliant WSGI thread-pooled webserver
- Simplicity of running multiple HTTP servers at once
- A powerful configuration system
- A flexible plugin system
- Out-of-the-box tools for caching, encoding, sessions, authentication, static content, and so on
- Built-in support for profiling, coverage, and testing
- Ability to run on Python 2.7+, Python 3.1+, PyPy, Jython, and Android
盡管具有所有功能和優(yōu)點,但許多開發(fā)人員認(rèn)為 CherryPy 的文檔可以使用一些改進。另外,CherryPy 可能至少更易于使用。
像大多數(shù)其他框架一樣,CherryPy 背后有一個社區(qū),可為初學(xué)者和高級開發(fā)人員提供幫助。CherryPy 有一個郵件列表,建議開發(fā)人員加入框架的IRC頻道或Gitter和Google小組。
Falcon
Official Website | GitHub | PyPI
Falcon是一個 bare-metal Python Web API框架,用于構(gòu)建非??焖俚膽?yīng)用程序后端。該框架的徽標(biāo)是獵鷹,象征著獵鷹的工作速度。
該框架使開發(fā)人員可以設(shè)計更清潔的設(shè)計并處理大多數(shù)請求。 Falcon從不限制開發(fā)人員選擇用于數(shù)據(jù)庫和授權(quán)的庫。
Falcon其他有價值的功能:
100% code coverage with a comprehensive test suite
A highly optimized code base
Upfront exception handling
REST-inspired resource classes
URI templates for intuitive routines
Easy access via request and response classes
DRY request processing via middleware components
Idiomatic HTTP error responses
Unit testing via WSGI helpers
Falcon在開發(fā)Web框架時會忽略無用的操作。此外,它還提供了選擇的自由:開發(fā)人員可以制定有助于他們自由調(diào)整和自定義實現(xiàn)的決策。
值得一提的另外兩個優(yōu)點是,可以使用大量的文檔,還可以創(chuàng)建一個活躍的社區(qū)。
Hug
Official Website | GitHub | PyPI
Hug是一個Python 3 API開發(fā)框架。它的設(shè)計使軟件工程師可以先開發(fā)一個 API,然后在需要時再使用它。
Hug 框架通過提供各種接口來簡化 API 開發(fā)。這就是為什么該框架被稱為 Python 3 中最快的框架的主要原因。
Hug 的主要特點:
Support for automatic documentation
Annotation-powered validation
Built-in version management
Compliance with Cython
Can be used as a Python library
Hug框架包含盡可能少的集成和盡可能少的代碼,保持功能正常并提供出色的性能。另外,Hug的社區(qū)正在不斷壯大。這表明了該框架的需求,并證明了每當(dāng)出現(xiàn)問題時,開發(fā)人員都可以找到幫助。
FastAPI
Official Website |GitHub |PyPI
FastAPI 是一個基于 Python 的現(xiàn)代框架。它最初被設(shè)計為易于使用,以確保最佳的開發(fā)體驗。迄今為止, FastAPI 是使用 Python 3.6+ 構(gòu)建 API 最快的框架之一。
該框架具有 Flask 的幾個特征,包括其簡單性。整個框架基于Starlette構(gòu)建,并包含其大部分功能(模板,WebSocket和GraphQL支持)。
FastAPI 框架提供:
- Increase in development speed by 200% to 300%
- Reduced errors by 40%
- Less time debugging
- Minimization of code duplication
- Automatic interactive documentation
FastAPI并沒有與任何數(shù)據(jù)庫緊密耦合。但是,它支持您需要的數(shù)據(jù)庫。使用FastAPI,您可以自由地按需要構(gòu)建項目,甚至可以使用Flask項目之一中的大多數(shù)相同文件。
唯一的缺點是社區(qū)很小。但這是因為 FastAPI 是一個相對較新的框架。
異步框架
異步框架是一種相對較新的 Python 框架。這是一個微框架,使開發(fā)人員能夠處理大量并發(fā)連接。異步框架使用非阻塞套接字,并以 Python 的 asyncio 庫作為輸入。
Sanic
Official Website | GitHub | PyPI
Sanic 是一個基于 uvloop 的 Python Web 框架,專門針對通過異步請求處理的快速 HTTP 響應(yīng)而創(chuàng)建。
它可以在 Python 3.5+ 上運行。Sanic 支持異步請求處理程序,從而使其與 Python 3.5 的 async / await 函數(shù)兼容。這提高了速度,提供了非阻塞功能。
由于 Sonic 具有路由,中間件,cookie,版本控制,靜態(tài)文件,藍(lán)圖,基于類的視圖和套接字,因此在 Python 世界中被認(rèn)為是首選的異步框架。但是,它不提供數(shù)據(jù)庫支持和模板。
在具有一個進程和 100 個連接的基準(zhǔn)測試中,Sanic 每秒能夠處理33,342個請求,平均延遲為2.96毫秒。
Tornado
Official Website | GitHub | PyPI
Tornado 是一個 Python Web 框架和異步網(wǎng)絡(luò)庫,專注于速度和處理大量流量的能力。它使用無阻塞網(wǎng)絡(luò)I / O并解決了C10k問題(這意味著,如果配置正確,它可以處理10,000多個并發(fā)連接)。
這使其成為構(gòu)建需要高性能和成千上萬并發(fā)用戶的應(yīng)用程序的絕佳工具。
Tornado 的主要特點是:
- Built-in support for user authentication
- Real-time services
- High-quality performance
- Python-based web templating language
- Non-blocking HTTP client
- Implementation of third-party authentication and authorization schemes (Google OpenID/OAuth, Facebook Login, Yahoo BBAuth, FriendFeed OpenID/OAuth, Twitter OAuth)
- Support for translation and localization
就受歡迎程度而言,龍卷風(fēng)介于 Django 和 Flask 之間。假設(shè)由于它們的功能和工具,您想要用Flask或 Django 寫東西,但是您還需要更好的性能。在這種情況下,您應(yīng)該選擇“Tornado”。
其他
Dash
Official Website | GitHub | PyPI | Awesome
Dash是用于構(gòu)建分析 Web 應(yīng)用程序的開源 Python 框架。對于對網(wǎng)絡(luò)開發(fā)不太熟悉的 Python 數(shù)據(jù)科學(xué)家來說,這尤其有用。
Dash有兩個基本優(yōu)點:
- It allows you to build highly interactive applications using only Python code.
- It makes it simple to use the power of Python tools for manipulating data.
Dash 應(yīng)用程序是運行 Flask 并通過 HTTP 請求與 JSON 數(shù)據(jù)包通信的Web服務(wù)器。他們的前端使用 React.js 渲染組件。
使用Dash開發(fā)的應(yīng)用程序?qū)⒃赪eb瀏覽器中呈現(xiàn),并且可以部署到服務(wù)器。這也意味著Dash應(yīng)用程序本質(zhì)上是跨平臺且可移動的。
Dash 開發(fā)人員可以訪問基礎(chǔ)的Flask實例及其所有可配置屬性。為了擴展 Dash 應(yīng)用程序的功能,開發(fā)人員還可以使用豐富的 Flask Plugins。
Eve
Category: Micro Framework
Eve 是在 Flask 之上構(gòu)建的 API 微框架。
Eve 的目標(biāo)是使 REST API 開發(fā)極其快速和簡單。因此,它建立在 Flask 原理的基礎(chǔ)上,不包括 Flask 的所有 Web 應(yīng)用程序組件。
Eve 支持最常用的 REST API 接口模式,例如 CRUD 操作,可自定義的 API 端點,過濾,排序,分頁,JSON / XML / JSONP格式。
它還支持高級功能,例如身份驗證,CORS,緩存,速率限制等。Eve還支持與 MongoDB 和 SQL 數(shù)據(jù)庫集成。
Eve 提供了一個 Python 配置設(shè)置文件來定義 API 資源和端點。這樣,可以使用聲明性 JSON 語法構(gòu)建 REST API。
有關(guān)更多詳細(xì)信息,請參閱 Eve quickstart guide,或瀏覽 GitHub repository。