Python Web 开发的十大框架

结论:
初学Python Web开发,建议用用Web2py或Flask

最终的选择大概还Django
当然也可以直接学习Django

Python Web 开发的十大框架

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