Python一直是构建网络服务的首选语言,从快速和肮脏的RESTful API到服务于数百万用户的成熟的网络应用。如果你已经涉足这一领域,你可能已经使用了一些最流行的网络框架--Django、Flask、Falcon、Tornado、CherryPy,等等。
不过,在过去的几年里,有许多新的孩子加入了这个行列。这些新的框架采取了一种新的方法,专注于API的性能和表现力。这里有一个Python中新的网络框架的比较,你应该为你的下一个项目考虑。
你可能还想看看DeepSource的Python静态分析,它可以在你的Python代码中检测出550多个错误风险、反模式和安全漏洞。
1.Sanic
Sanic自称是一个网络服务器和网络框架,是为了快速发展而写的。它允许使用Python 3.5中添加的`async`/`await`语法,这使得你的代码无阻塞且速度快。Sanic使用`uvloop`和`ujson`来帮助提高性能,但这些包是可选的。
安装
你好,世界的例子
from sanic import Sanic
from sanic.response import json
app = Sanic()
@app.route('/')
async def test(request):
return json({'hello': 'world'})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
2.Starlette
Starlette是一个轻量级的[ASGI](asgi.readthedocs.io/en/latest/)…](github.com/psf/request…
安装
你好世界的例子
from starlette.applications import Starlette
from starlette.responses import JSONResponse
import uvicorn
app = Starlette(debug=True)
@app.route('/')
async def homepage(request):
return JSONResponse({'hello': 'world'})
if __name__ == '__main__':
uvicorn.run(app, host='0.0.0.0', port=8000)
3.Masonite
Masonite是一个以开发者为中心的Python网络框架,它致力于成为一个实际的包含电池的开发者工具,具有大量的开箱即用的功能和极度可扩展的架构。它有一个简单而富有表现力的路由引擎,一个简单的迁移系统,消除了迁移的 "魔力 "和手指交叉,还有一个伟大的Active Record风格的ORM,叫做Orator。
安装
4.快速API
FastAPI是一个现代的、高性能的网络框架,用于在标准Python类型提示的基础上用Python 3.6+构建API。它建立在Starlette之上,是目前最快的Python框架之一。基于并完全兼容API的开放标准--[OpenAPI](github.com/OAI/OpenAPI… Schema](json-schema.org/)。
安装
你好,世界的例子
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
5.应答器
同样基于Starlette,Responder的主要概念是将Flask和Falcon带来的好处,统一到一个框架中。它内置了一个生产用的静态文件服务器,自动gzipped-responses,本地GraphQL支持,以及一个内置的测试客户端,使用[requests](github.com/psf/request…
安装
你好世界的例子
import responder
api = responder.API()
@api.route("/{greeting}")
async def greet_world(req, resp, *, greeting):
resp.text = f"{greeting}, world!"
if __name__ == '__main__':
api.run()
6.摩尔腾
Molten是一个最小的、可扩展的、快速的、高效的框架,用于用Python构建HTTP APIs。Molten可以根据预定义的模式自动验证请求,确保你的处理程序只在有效输入的情况下运行。Molten还支持基于函数的中间件、依赖注入,并包括`molten.contrib`包,其中包含了现实世界中API通常需要的各种功能,如配置文件、Prometheus指标、请求ID、会话、SQLAlchemy、模板、websockets等。
安装
你好世界的例子
from molten import App, Route
def hello(name: str) -> str:
return f"Hello {name}!"
app = App(routes=[Route("/hello/{name}", hello)])
7.Japronto
Japronto是一个速度惊人、可扩展、异步的Python 3.5+ HTTP工具包,集成了基于uvloop 和picohttpparser 的管道化HTTP服务器。它的目标是速度爱好者、喜欢管道化的人和早期采用者。目前没有新的项目开发发生,但也没有被放弃。
安装
你好世界的例子
from japronto import Application
def hello(request):
return request.Response(text='Hello world!')
app = Application()
app.router.add_route('/', hello)
app.run(debug=True)
8.克莱因
Klein是一个微型框架,用于用Python开发可用于生产的Web服务。它的 "微 "在于它有一个类似于Bottle和Flask的非常小的API。它不 "微",因为它依赖于标准库之外的东西。这主要是因为它是建立在像Werkzeug和Twisted这样广泛使用并经过良好测试的组件上。
安装
你好,世界的例子
from klein import run, route
@route('/')
def home(request):
return 'Hello, world!'
run("localhost", 8080)
9.夸特
Quart是一个Python ASGI网络微框架。它的目的是为在网络环境中使用asyncio功能提供最简单的方法,特别是与现有的Flask应用程序一起使用。这是可能的,因为Quart API是Flask API的一个超集。Quart旨在成为一个完整的网络微框架,因为它支持HTTP/1.1、HTTP/2和websockets。
安装
你好世界的例子
rom quart import Quart, websocket
app = Quart(__name__)
@app.route('/')
async def hello():
return 'hello'
@app.websocket('/ws')
async def ws():
while True:
await websocket.send('hello')
app.run()
10.BlackSheep
BlackSheep是一个异步网络框架,用于构建基于事件的、非阻塞的Python网络应用。它的灵感来自Flask和ASP.NET Core。BlackSheep支持通过类型注解或约定来自动绑定请求处理程序的值。它还支持依赖性注入,并实现了使用外部库来处理认证和授权的策略。
安装
你好世界的例子
from datetime import datetime
from blacksheep.server import Application
from blacksheep.server.responses import text
app = Application()
@app.route('/')
async def home(request):
return text(f'Hello, World! {datetime.utcnow().isoformat()}')
11.Cyclone
Cyclone是一个Web服务器框架,它将Tornado API作为Twisted协议来实现。它的想法是将Tornado优雅而直接的API与Twisted的Event-Loop连接起来,实现大量的支持协议。这种组合为建立混合服务器提供了基础,它能够非常有效地处理HTTP,同时也能服务或使用电子邮件、SSH、SIP、irc等,所有这些都能同时进行。
安装