Python web 框架
参考:Top 13 Python Web Frameworks to Learn in 2020 (steelkiwi.com) 和 Top 15 Best Python REST API Frameworks (2021) | RapidAPI。
全栈框架
Django
Official Website | GitHub | PyPI
Django 是一个免费的开源全栈 Python 框架。默认情况下,它尝试包含所有必需的功能,而不是将它们作为单独的库提供。Django 的一些示例性功能是其 authentication, URL routing, template engine, object-relational mapper (ORM), 和 database schema migrations(Django v.1.7 +)。
这些功能使 Django 具有高度的可扩展性,快速和极其灵活的功能。
Django 使用其 ORM 将对象映射到数据库表。相同的代码可用于不同的数据库,并且不难从一个数据库转移到另一个数据库。Django 使用的主要数据库是 PostgreSQL, MySQL, SQLite 和 Oracle,但是第三方驱动程序也允许您使用其他数据库。
使用 Django,您可以制作从小型项目到复杂网站的任何Web应用程序。凭借其灵活性,Django 也可用于制作MVP,从而使初创公司能够优化其时间和预算。
Django 的用户群有望增长,因为许多开发人员认为此框架是新兴技术(如机器学习)的最佳选择。 另外,在2020 年,Django 社区计划发布更多库以满足不断增长的需求。
Pyramid
Official Website | GitHub | PyPI | Awesome
Pyramid 是一个基于 Python 的开放源代码,也是第二个值得注意的 Web 应用程序框架。它的目标是以最小的复杂度来尽可能多地做。Pyramid 在 Python 3 上运行,紧跟技术进步。Pyramid 1.10 是框架的当前版本,并且是自 2010 年以来的第十次更新。
Pyramid 的最显着特征是它在大型和小型应用程序中都能很好地工作。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,开发人员可以决定模板语言,生成库和数据库层。
金字塔社区很活跃,并且发布了许多版本。 开发人员可以通过加入IRC官方频道或加入Google和Twitter组来关注框架的进展。
TurboGears
Official Website | GitHub | PyPI
TurboGears 是一个开源的,数据驱动的全栈Web应用程序框架。它建立在许多中间件和许多库的基础上,最初旨在结合其他 Python 框架的最佳组件。
TurboGears 使您可以快速开发可扩展的数据驱动的Web应用程序。它带有一个用户友好的模板引擎以及一个强大而灵活的ORM。除了使设计师的工作更轻松的出色模板系统外,TurboGears 还提供了很多灵活性,强大的聚合支持,强大的ORM和可重复使用的代码段。
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的未来,该社区目前正在努力改善框架的功能和整体稳定性,并即将发布“最小代码”。 该代码也称为微框架或TurboGears的精简版本。 最少的代码将帮助开发人员更快地构建应用程序,从而节省金钱和时间。
Web2py
Official Website | GitHub | PyPI
Web2py 是可扩展的开源全栈 Python 框架。在处理数据方面,它非常强大。Web2py 最初是作为教学工具提供的,重点是易用性。这解释了为什么没有项目级配置文件。
不过,Web2py 的优点是它带有自己的基于 Web 的 IDE,其中包括代码编辑器,调试器和一键式部署。
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
票务系统是Web2py的主要功能。每当发生错误时,它都会发出票证。这样,用户可以跟踪错误及其状态。
尽管有所有这些优点,但Web2py社区比Pyramid或Django的社区小。没有多少开发人员正在使用它。这意味着获得支持的机会更低。另外,官方邮件列表不是很活跃。
Microframeworks
微框架或简约的Web应用程序框架缺少完整框架的大多数功能,例如Web模板引擎,身份验证功能,帐户,授权,输入验证和输入环境卫生。微框架试图仅提供构建应用程序所需的组件集。它还可能专注于为一个特定领域提供必要的功能。
Flask
Official Website | GitHub | PyPI | Awesome
Flask 是 BSD 许可下可用的 Python 框架。它的灵感来自 Sinatra Ruby 框架。Flask 依赖于Werkzeug WSGI toolkit和Jinja2模板。
Flask的主要思想是帮助建立坚实的Web应用程序基础。从那里,您可以使用可能需要的任何扩展。Flask被选择用于所有项目。实际上,对于任何与Django不匹配的网络项目,这都是默认选择。
Flask的轻巧和模块化设计使其可以轻松适应开发人员的需求。它包括许多有用的即用型功能:
- 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 年推出以来,Flask 已更新了27次。迄今为止,它仍然是增长最快的 Python 框架。但是,不再支持许多 Flask 扩展程序:文档已过时,不再开发。如果遇到这种情况,则需要 Google 查找具有类似功能的受积极支持的插件。
Bottle
Official Website | GitHub | PyPI
Bottle是一个微框架。Bottle 最初是为了构建 API 而设计的,它在单个源文件中实现了所有功能。除了 Python 标准库外,它没有依赖项。与任何完整堆栈框架进行编码相比,使用 Bottle 进行编码使您与金属更接近。但是,只有在您制作的应用程序非常小且最多有 500 行代码且没有特殊要求时,Bottle才是匹配项。
它的默认功能包括路由,模板,实用程序以及基于 WSGI标准的基本抽象。
- 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次更新,现在它是用于原型设计,学习网络框架的组织以及构建简单的个人应用程序的完美解决方案。
对Bottle社区的任何贡献都可以通过GitHub接受。用户还可以加入Bottle邮件列表和博客,并关注Twitter上的最新更改。如果您正在寻找其他论坛进行讨论,请加入freenode聊天。
CherryPy
Official Website | GitHub | PyPI
CherryPy 是一个开放源代码的简约Web框架。它使构建Python Web应用程序与构建任何其他面向对象的程序没有什么不同。
CherryPy 被创建为可扩展的。该框架甚至提供了用于挂钩点和扩展的机制。例如,基于 CherryPy 的Web应用程序是一个独立的 Python 应用程序,它嵌入了自己的多线程 Web 服务器。借助自己的Web服务器,扩展点包括请求-响应周期之外的功能,从而增加了 CherryPy 的可扩展性。
实际上,基于 CherryPy 的 Web 应用程序是一个独立的 Python 应用程序,它嵌入了自己的多线程 Web 服务器。CherryPy 应用程序可在支持 Python 的任何操作系统(Windows,macOS,Linux等)上运行。它们可以部署在可以运行普通 Python 应用程序的任何位置。CherryPy 应用程序不需要 Apache,但是您可以在 Apache 后面运行 CherryPy 应用程序,就像在Lighttpd 或者 IIS后面运行它一样。
CherryPy 并不是一个非常有限的框架,因为它允许您使用任何类型的技术进行模板,数据访问等。但是,它仍然可以处理会话,静态数据,Cookie,文件上传以及网络框架通常可以执行的所有其他操作。
CherryPy的一些默认功能包括:
- 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
尽管具有所有功能和优点,但许多开发人员认为 CherryPy 的文档可以使用一些改进。另外,CherryPy 可能至少更易于使用。
像大多数其他框架一样,CherryPy 背后有一个社区,可为初学者和高级开发人员提供帮助。CherryPy 有一个邮件列表,建议开发人员加入框架的IRC频道或Gitter和Google小组。
Falcon
Official Website | GitHub | PyPI
Falcon是一个 bare-metal Python Web API框架,用于构建非常快速的应用程序后端。该框架的徽标是猎鹰,象征着猎鹰的工作速度。
该框架使开发人员可以设计更清洁的设计并处理大多数请求。 Falcon从不限制开发人员选择用于数据库和授权的库。
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在开发Web框架时会忽略无用的操作。此外,它还提供了选择的自由:开发人员可以制定有助于他们自由调整和自定义实现的决策。
值得一提的另外两个优点是,可以使用大量的文档,还可以创建一个活跃的社区。
Hug
Official Website | GitHub | PyPI
Hug是一个Python 3 API开发框架。它的设计使软件工程师可以先开发一个 API,然后在需要时再使用它。
Hug 框架通过提供各种接口来简化 API 开发。这就是为什么该框架被称为 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的社区正在不断壮大。这表明了该框架的需求,并证明了每当出现问题时,开发人员都可以找到帮助。
FastAPI
Official Website |GitHub |PyPI
FastAPI 是一个基于 Python 的现代框架。它最初被设计为易于使用,以确保最佳的开发体验。迄今为止, FastAPI 是使用 Python 3.6+ 构建 API 最快的框架之一。
该框架具有 Flask 的几个特征,包括其简单性。整个框架基于Starlette构建,并包含其大部分功能(模板,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并没有与任何数据库紧密耦合。但是,它支持您需要的数据库。使用FastAPI,您可以自由地按需要构建项目,甚至可以使用Flask项目之一中的大多数相同文件。
唯一的缺点是社区很小。但这是因为 FastAPI 是一个相对较新的框架。
异步框架
异步框架是一种相对较新的 Python 框架。这是一个微框架,使开发人员能够处理大量并发连接。异步框架使用非阻塞套接字,并以 Python 的 asyncio 库作为输入。
Sanic
Official Website | GitHub | PyPI
Sanic 是一个基于 uvloop 的 Python Web 框架,专门针对通过异步请求处理的快速 HTTP 响应而创建。
它可以在 Python 3.5+ 上运行。Sanic 支持异步请求处理程序,从而使其与 Python 3.5 的 async / await 函数兼容。这提高了速度,提供了非阻塞功能。
由于 Sonic 具有路由,中间件,cookie,版本控制,静态文件,蓝图,基于类的视图和套接字,因此在 Python 世界中被认为是首选的异步框架。但是,它不提供数据库支持和模板。
在具有一个进程和 100 个连接的基准测试中,Sanic 每秒能够处理33,342个请求,平均延迟为2.96毫秒。
Tornado
Official Website | GitHub | PyPI
Tornado 是一个 Python Web 框架和异步网络库,专注于速度和处理大量流量的能力。它使用无阻塞网络I / O并解决了C10k问题(这意味着,如果配置正确,它可以处理10,000多个并发连接)。
这使其成为构建需要高性能和成千上万并发用户的应用程序的绝佳工具。
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
就受欢迎程度而言,龙卷风介于 Django 和 Flask 之间。假设由于它们的功能和工具,您想要用Flask或 Django 写东西,但是您还需要更好的性能。在这种情况下,您应该选择“Tornado”。
其他
Dash
Official Website | GitHub | PyPI | Awesome
Dash是用于构建分析 Web 应用程序的开源 Python 框架。对于对网络开发不太熟悉的 Python 数据科学家来说,这尤其有用。
Dash有两个基本优点:
- 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 应用程序是运行 Flask 并通过 HTTP 请求与 JSON 数据包通信的Web服务器。他们的前端使用 React.js 渲染组件。
使用Dash开发的应用程序将在Web浏览器中呈现,并且可以部署到服务器。这也意味着Dash应用程序本质上是跨平台且可移动的。
Dash 开发人员可以访问基础的Flask实例及其所有可配置属性。为了扩展 Dash 应用程序的功能,开发人员还可以使用丰富的 Flask Plugins。
Eve
Category: Micro Framework
Eve 是在 Flask 之上构建的 API 微框架。
Eve 的目标是使 REST API 开发极其快速和简单。因此,它建立在 Flask 原理的基础上,不包括 Flask 的所有 Web 应用程序组件。
Eve 支持最常用的 REST API 接口模式,例如 CRUD 操作,可自定义的 API 端点,过滤,排序,分页,JSON / XML / JSONP格式。
它还支持高级功能,例如身份验证,CORS,缓存,速率限制等。Eve还支持与 MongoDB 和 SQL 数据库集成。
Eve 提供了一个 Python 配置设置文件来定义 API 资源和端点。这样,可以使用声明性 JSON 语法构建 REST API。
有关更多详细信息,请参阅 Eve quickstart guide,或浏览 GitHub repository。