结论:
初学Python Web开发,建议用用Web2py或Flask
最终的选择大概还Django
当然也可以直接学习Django
Python Web 框架一直是 Web 开发的关键,尽管 Python 如今在机器学习领域的使用获得了很多赞誉。事实上,每当我提出一个新想法的原型时,我通常会先将其包装在网络服务器上,然后再对其进行测试,或者请其他人对其进行评估。基于 Web 的界面使得与原型交互变得更加容易。在大多数情况下,您甚至不需要 GUI – 由 Web 服务器提供的简单 API 可以使您的原型易于交互。
我通常会选择像 Python 的 Flask 这样快速简单的 Web 服务器,但 Python 中有数百种 Web 框架。这篇文章重点介绍了许多主要的 Python Web 框架,从已经开发了十多年的老后卫(如 Django)到区块中的新手(如 FastAPI)。我将介绍每个框架的一些主要特性和功能,并权衡每个框架的优缺点。
阅读本文后,您应该对每个框架最适合什么样的项目有一个很好的了解。
以下是我用于 Web 开发的十大 Python 框架:
#1 Flask Python Web 框架
这是我的“OG”。这是我最喜欢的 Python 工具,当我需要一个简单的 Web 服务器来快速提供一个简单的 API 时,我总是会回来使用它。它没有花哨的功能(没有数据库抽象层、表单验证或邮件支持),但确实有大量扩展。
您可以在我之前的博文“让开发人员的生活更轻松的 10 大 Python 工具”中阅读有关如何使用Flask的更多信息。
优点:
- 简单但强大
- 快速部署——2 秒内启动并运行!
- 可扩展性——轻松扩展以涵盖几乎任何用例
缺点:
- 异步不友好
- 有限的“开箱即用”功能
#2 Bottle Python Web 框架
Bottle 与 Flask 非常相似(名字也是如此!)。然而,它的目标是成为 Web 服务器的薄包装器,仅此而已。Flask 是一个微型 Web 框架,而 Bottle 只是一个包装器。它具有动态路由和模板化响应等有用的功能,但它的可扩展性不是很好,并且无法扩展以包含像 Flask 这样的可插入模块。
然而,对于真正快速和dirty的东西,它的效果很好!
以下是快速设置和运行 Bottle 的方法:
from bottle import route, run @route('/hello') def hello(): return "Hello World!" run(host='localhost', port=8080, debug=True)
优点:
- 采用最适合简单、小型项目的“单一文件”方法
- 非常适合快速 API
缺点:
- 采取“一个文件”的方法,除了最小的项目外,不适合所有项目
- 不是很可扩展
#3 Pyramid Python Web 框架
Pyramid 是一个非常灵活的 Web 框架,因为它可以针对中小型 Web 应用程序进行扩展。与 Flask 一样,只需将库导入任何代码库并将其用作 Web 服务器,即可轻松部署。与 Flask 不同,它提供了许多开箱即用的关键功能,如静态资产渲染、URL 生成,甚至是一个体面的身份验证系统。
希望您的应用程序充当内部工具?金字塔是一个很好的选择。当然,它比 Flask 稍微复杂一点,但是以一种好的方式。而且它也得到了很好的维护,它的创建者会定期更新。
以下是快速设置和运行 Pyramid 的方法:
from wsgiref.simple_server import make_server from pyramid.config import Configurator from pyramid.response import Response def hello_world(request): return Response('Hello World!') if __name__ == '__main__': with Configurator() as config: config.add_route('hello', '/') config.add_view(hello_world, route_name='hello') app = config.make_wsgi_app() server = make_server('0.0.0.0', 6543, app) server.serve_forever()
优点:
- 大量标准功能
- Flask 和 Django 之间的中间人,在这里你需要比 Flask 更强大的东西,但又不是 Django 的矫枉过正
缺点:
- Flask 和 Django 之间的中间人,您希望它像 Flask 一样易于使用,或者像 Django 一样有更多“包含电池”(即模板、对象关系映射器等)
#4 Web2py Python 网络框架
是的,这个名字不是很有创意或吸引人,但如果我告诉你它是为了用于教学而创建的,这是否有意义?
Web2py 最初是作为学习 Web 和 Web 服务器的教学工具而诞生的。它非常用户友好,甚至带有自己的基于 Web 的 IDE,其中包含代码编辑器、调试器、linter 和一键式部署工具!
需要更多?Web2py 预打包了一些工具,使其可以在 Google App Engine 和 Amazon EC2 上运行,因此您可以将其部署在云中。甚至还有一个内置的票务系统,可以在您的网络服务器遇到错误时自动提出票证。
只是证明你永远不应该以封面来判断一本书!查看主页和示例目录。
优点:
- 非常适合网络开发初学者
- 为构建、部署甚至生产场景提供强大支持
缺点:
- IDE 实际上只是一个管理控制台,具有有限的代码编辑/调试功能
- 没有广泛的网络开发者社区
#5 Falcon Python Web 框架
如果您正在寻找速度,那么您来对地方了。顾名思义,Falcon 专为速度极快而打造。它的代码库针对处理大量请求进行了优化。
我真的很喜欢它的面向对象的方法。我觉得它比之前讨论的 Web 框架带来的插件架构更具可定制性。
Falcon 绝对正确地掌握了构建 API 的基础知识:RESTful、快速、可扩展且可靠。像 LinkedIn 这样的组织依赖它!它的维护者竭尽全力确保更新不会引入重大更改。
以下是快速设置和运行 Falcon 的方法:
import falcon class QuoteResource: def on_get(self, req, resp): """Handles GET requests""" quote = { 'quote': ( "I've always been more interested in " "the future than in the past." ), 'author': 'Grace Hopper' } resp.media = quote api = falcon.API() api.add_route('/quote', QuoteResource())
优点
- 我有提到快速性能吗?真的很快!
- 高度可定制
缺点
- 专注于构建 REST API
- 仅后端——不适合提供前端页面
#6 FastAPI Python Web 框架
需要速度快但不仅仅提供速度的东西吗?自动数据验证、网络套接字和文档怎么样?好吧,这就是适合您的 FastAPI。
它借鉴了 Flask 的简单性,同时提供可与NodeJS 或 Go相媲美的高性能!顾名思义,它专注于帮助您创建基于OpenAPI标准的快速 API,并提供出色的序列化库。
如果您希望将代码库的模块公开为 API,那么这是执行此操作的最佳框架。虽然其他框架可以呈现 JSON 结构,但 FastAPI 是根据这一特定任务自下而上构建的。
我唯一希望它提供的是 Protobuf 实现,但它相对较新,因此可能会在未来的版本中推出。
以下是快速设置和运行 FastAPI 的方法:
from fastapi import FastAPI app = FastAPI() @app.get("/") async def root(): return {"message": "Hello World"}
优点
- 最快的 Python Web 框架之一
- 异步支持
缺点
- 缺乏 Protobuf 支持
- 比列表中的其他框架更新,因此社区更小
#7 Tornado Python Web 框架
异步框架对于 Python 来说相对较新,但使用它们,您可以轻松构建大型并发应用程序,如实时聊天、在线游戏和视频应用程序。在这个流行病强制远程工作的时代,非常需要分散注意力!
Tornado 是一个 Python Web 框架和异步网络库,专注于速度和处理大量流量的能力。它使用非阻塞 I/O 来确保异常快速的性能。
随着时间的推移,这个框架越来越受欢迎。我肯定会推荐 Tornado 而不是 Django 来构建实时应用程序。
以下是快速设置和运行 Tornado 的方法:
import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def get(self): self.write("Hello, world") def make_app(): return tornado.web.Application([ (r"/", MainHandler), ]) if __name__ == "__main__": app = make_app() app.listen(8888) tornado.ioloop.IOLoop.current().start()
您可以在上面的示例中看到 Tornado 与 Flask 的不同之处。当涉及到长期存在的应用程序时,它会做出正确的决定,并选择使用非阻塞 I/O 来尽可能长地存活。
优点
- 对实时功能的强大支持
- 快速性能
缺点
- 缺少对象关系映射 (ORM)
- 仅适用于实时应用程序的利基工具
#8 Sanic Python Web 框架
想要异步性能但不喜欢 Tornado?那么你只有一个选择:Sanic。Sanic 是一个异步 Web 框架,它建立在uvloop 之上,在cython中实现。这赋予了它出色的异步性能。
如果您要构建与路由、中间件或套接字相关的任何东西,Sanic 应该是您的首选框架。但我也喜欢 Sanic 干净的编码结构,例如:
-- from sanic import Sanic</code> <code>-- from sanic.response import json
以下是快速设置和运行 Sanic 的方法:
app = Sanic() @app.route('/') async def test(request): return json({'hello': 'world'}) if __name__ == '__main__': app.run(host='0.0.0.0', port=8000)
优点
- 很棒的表现
- 非常适合网络应用
缺点
- 不如其他框架成熟
- 利基工具
#9 Dash Python Web 框架
在过去的几年里,数据科学和机器学习在 Python 爱好者和企业中越来越受欢迎。事实上,很难找到至少没有尝试过某种数据分析编程的 Python 开发人员。但是,如果您希望用户与之交互并可视化,那么任何与数据有关的事情都需要与 Web 服务器相结合。由于数据可视化通常不是数据科学家的领域,因此通常留给经验丰富的 Web 开发人员介入和交付。
但是为了将你的数据模型暴露给网络,你需要知道如何创建一个强大的后端 API 服务器和一个漂亮的前端 UI 来显示你的图表。对于我们大多数人来说,这是一项艰巨的任务,而这正是 Dash 来拯救的地方。数据团队广泛使用 Dash Web 平台来生成基于 Python 和 R 模型的企业级分析应用程序。
Dash 本质上用 Python 包装了图形库,因此您永远不需要使用 CSS 或 JavaScript 来利用它们。它还具有 Kubernetes 集成,可帮助您无缝部署和扩展。唯一的缺点是它的许多最佳功能都在付费专区后面。
在我们的Dash vs Bokeh 博客文章中阅读有关 Dash 以及如何使用它的更多信息。
优点
- 交互式仪表板变得简单
- 广泛的文档和非常活跃的社区
缺点
- 企业功能的付费专区
- 如果你使用 React.js,你需要手动将你的组件移植到 Dash
#10 Django Python Web 框架
Python 的 web 框架的前 10 名列表中怎么会有不包含 Django 的帖子?这是一种作弊条目,因为 Django 已成定局。它非常受欢迎,以至于许多初次接触 Django 的 Web 开发人员都开始接触 Django。
无论您是想建立业务还是只是想启动一个想法,Django 都是最佳解决方案。它足够快、足够安全、足够可扩展并且经过生产测试足以处理几乎任何 webdev 任务。它是在考虑微服务的情况下构建的。它通过庞大的库存储库负责用户身份验证、数据库处理——所有标准例程。社区支持是无与伦比的,并且随着 Python 的复兴而继续增长。
如果这篇博文让您对太多选项感到困惑,那就选择 Django 吧!
优点
- 久经沙场、久经考验、万能的 webdev 框架
- “包含电池”——开箱即用,提供您所需的一切
缺点
- 固执己见——你要么喜欢“Django 方式”做事,要么不喜欢
- URL 路由需要正则表达式——正则表达式!
注意:安装 Top 10 Web Frameworks 环境的最简单方法是首先安装 ActiveState Platform 的命令行界面 (CLI),即 State Tool。
- 如果您使用的是 Windows,则可以使用 Powershell 安装状态工具:
IEX(New-Object Net.WebClient).downloadString('https://platform.activestate.com/dl/cli/install.ps1')
- 如果您使用的是 Linux / Mac,则可以使用 curl 安装状态工具:
sh <(curl -q https://platform.activestate.com/dl/cli/install.sh)
安装状态工具后,只需运行以下命令即可下载构建并自动将其安装到虚拟环境中:state activate Pizza-Team/Top-10-Python-Web-Frameworks