Django, Flask? 你有更多的选择。11个新的Python web开发框架
liebian365 2024-11-26 05:53 19 浏览 0 评论
从RESTful API到可以为数百万用户提供服务的成熟Web应用程序,Python一直是构建Web服务的语言。如果您一直涉足这一领域,那么您可能已经使用了一些最受欢迎的Web框架-Django,Flask,Falcon,Tornado,CherryPy等。
但是,在过去的几年中,有很多新的选择出现。这些新框架采用了一些全新的方法,重点关注API的性能和表达能力。这是11个新的Web框架的介绍,您可以在下一个项目中考虑这些框架。
1. Sanic
Sanic定位为Web服务器和Web框架。它允许使用Python 3.5中添加的async / await语法,这使您的代码无阻塞而且快速。Sanic利用uvloop和ujson来提高性能,但是这些软件包是可选的。
安装
pip install sanic
Hello world 的例子
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)
项目地址: https://github.com/huge-success/sanic
2.Starlette
Starlette是一种轻量级的ASGI框架,是构建高性能异步服务的理想之选,旨在用作完整框架或ASGI工具包。附带一些电池,它支持WebSockets,GraphQL,进程内后台任务以及基于请求构建的客户端。
安装
pip install starlette
Hello world 的例子
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)
项目地址: https://github.com/encode/starlette
3.Masonite
Masonite是一个以开发人员为中心的Python Web框架,致力于开发包含开发人员工具的实际功能,该工具具有许多现成的功能以及极其可扩展的体系结构。它具有一个简单而富有表现力的路由引擎,一个简单的迁移(migration)系统以及一个称为Orator的出色Active Record风格的ORM。
安装
pip install masonite-cli
项目地址: https://github.com/MasoniteFramework/masonite
4. FastAPI
FastAPI是一个现代的高性能Web框架,用于基于标准Python type hints,使用Python 3.6+构建的API。它建立在Starlette的基础上,并且是最快的Python框架之一。基于并完全兼容API的开放标准-OpenAPI(以前称为Swagger)和Json Schema。
安装
pip install fastapi
Hello world 的例子
from fastapi import FastAPI app = FastAPI() @app.get("/") def read_root(): return {"Hello": "World"}
项目地址: https://github.com/tiangolo/fastapi
5.Responder
Responder同样基于Starlette,它的主要概念是将Flask和Falcon结合的优点整合到一个框架中。它具有内置的生产静态文件服务器,自动压缩响应,本地GraphQL支持以及使用请求的内置测试客户端。
安装
pip install responder
Hello world 的例子
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()
项目地址: https://github.com/taoufik07/responder
6.Molten
Molten是用于使用Python构建的HTTP API,它是很小的,可扩展,快速且高效的框架。Molten可以根据预定义的模式自动验证请求,确保您的处理程序仅在给出有效输入后才运行。Molten还支持基于功能的中间件,依赖项注入,并包括melt.contrib程序包,其中包含现实世界中API通常所需的各种功能,例如配置文件,Prometheus指标,请求ID,会话,SQLAlchemy,模板, websockets等。
安装
pip install molten
Hello world 的例子
from molten import App, Route def hello(name: str) -> str: return f"Hello {name}!" app = App(routes=[Route("/hello/{name}", hello)])
项目地址: https://github.com/Bogdanp/molten
7.Japronto
Japronto是一个快速的,可扩展的,异步的Python 3.5+ HTTP工具包,与基于uvloop和picohttpparser的流水线HTTP服务器集成在一起。目前没有新的项目开发,但也没有被放弃。
安装
pip install japronto
Hello world 的例子
from japronto import Application def hello(request): return request.Response(text='Hello world!') app = Application() app.router.add_route('/', hello) app.run(debug=True)
项目地址: https://github.com/squeaky-pl/japronto
8.Klein
Klein是一个小型框架,用于使用Python开发可用于生产环境的Web服务。它是“微型”的,因为它具有类似于Bottle和Flask的非常小的API。它也不是“微型”的,因为它依赖于标准库之外的东西。这主要是因为它基于Werkzeug和Twisted等广泛使用且经过良好测试的组件。
安装
pip install klein
Hello world 的例子
from klein import run, route @route('/') def home(request): return 'Hello, world!' run("localhost", 8080)
项目地址: https://github.com/twisted/klein
9.Quart
Quart是Python ASGI网络微框架。它旨在提供最简单的方法来在Web上下文中使用asyncio功能,尤其是在现有的Flask应用程序中。这是可行的,因为Quart API是Flask API的超集。Quart旨在成为一个完整的Web微框架,因为它支持HTTP / 1.1,HTTP / 2和websocket。
安装
pip install quart
Hello world 的例子
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()
项目地址: https://github.com/pgjones/quart
10. BlackSheep
BlackSheep是一个异步Web框架,用于构建基于事件的非阻塞Python Web应用程序。它受Flask和ASP.NET Core的启发。BlackSheep支持通过类型注释或约定来自动绑定请求处理程序的值。它还支持依赖项注入,并实现使用外部库处理身份验证和授权的策略。
安装
pip install blacksheep
Hello world 的例子
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()}')
项目地址: https://github.com/RobertoPrevato/BlackSheep
11.Cyclone
Cyclone是一个Web服务器框架,将Tornado API实现为Twisted协议。这个想法是将Tornado优雅而简单的API桥接到Twisted的Event-Loop,从而实现大量受支持的协议。这种结合为构建混合服务器提供了基础,该服务器能够非常有效地处理HTTP,同时还可以同时服务或使用电子邮件,ssh,sip,irc等。
安装
pip install cyclone
项目地址: https://github.com/fiorix/cyclone
如果发现任何不正确的地方,或者想分享有关上述主题的更多信息,欢迎反馈。
相关推荐
- C#夯实基础-Lambda在List中的使用
-
在C#中基本类型比如List,Dictionary,数组等都有委托来实现相关的操作。此时Lambda表达式就可以使用了.实例1,查找字符串List的包含a的元素...
- 在C#中,如何实现对集合中元素的自定义排序?
-
在C#中,可以通过多种方式实现对集合中元素的自定义排序,主要包括:...
- C++11 新特性面试题_c++ 11 面试题
-
1、C++11中引入了哪些新的智能指针类型?请描述它们的用法和区别。C++11中引入了三种新的智能指针类型:std::unique_ptr,std::shared_ptr,和std::weak_...
- 为什么要使用lambda表达式?原来如此,涨知识了
-
为什么要使用Lambda表达式先看几段Java8以前经常会遇到的代码:创建线程并启动...
- [编程基础] Python lambda函数总结
-
Pythonlambda函数教程展示了如何在Python中创建匿名函数。Python中的匿名函数是使用lambda关键字创建的。...
- 硬核!Java 程序员必须掌握的 10 个 简化代码的 Lambda 表达式!
-
大家好,我是一位在架构师道路上狂奔的码农,今天给大家介绍一下程序员必须掌握的10个Lambda表达式,这些表达式几乎涵盖了在实际编程中经常用到的常见场景。相信通过这10个Lambda表...
- 一文读懂lambda表达式_lambda表达式由来
-
作者:youngyan,腾讯PCG数据工程工程师...
- Java基础知识 - lambda 表达式_javalambda表达式用法
-
1、表达式语法1)lambda的命名采用的是数学符号λ;...
- Python学习笔记 | 匿名函数lambda、映射函数map和过滤函数filter
-
什么是匿名函数?定义:没有函数名的自定义函数场景:函数体非常简单,使用次数很少,没有必要声明函数,通常搭配高阶函数使用。...
- Java Lambda表达式详解(非常全面)
-
JavaLambda表达式是JDK8引入的,是一个比较重要的特性。@mikechenLambda表达式简介...
- 了解 Lambda:Python 中的单个表达式函数
-
Python中的lambda关键字提供了声明小型匿名函数的快捷方式。Lambda函数的行为与使用...
- 在C#中使用Lambda编写一个排序算法,比较其与传统排序算法的优劣
-
使用Lambda表达式编写排序算法在C#中,Lambda表达式可以用来简化排序逻辑的编写,尤其是在需要自定义排序规则时非常方便。以下示例展示了如何用Lambda表达式实现排序,并与传统排...
- 一日一技:python中的匿名函数 lambda用法
-
匿名函数lambda,语法如下:lambdaarguments:expression...
- 《回炉重造》——Lambda表达式_回炉重造是贬义词吗
-
前言Lambda表达式(LambdaExpression),相信大家对Lambda肯定是很熟悉的,毕竟我们数学上经常用到它,即λ。不过,感觉数学中的Lambda和编程语言中的Lamb...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- wireshark怎么抓包 (75)
- qt sleep (64)
- cs1.6指令代码大全 (55)
- factory-method (60)
- sqlite3_bind_blob (52)
- hibernate update (63)
- c++ base64 (70)
- nc 命令 (52)
- wm_close (51)
- epollin (51)
- sqlca.sqlcode (57)
- lua ipairs (60)
- tv_usec (64)
- 命令行进入文件夹 (53)
- postgresql array (57)
- statfs函数 (57)
- .project文件 (54)
- lua require (56)
- for_each (67)
- c#工厂模式 (57)
- wxsqlite3 (66)
- dmesg -c (58)
- fopen参数 (53)
- tar -zxvf -c (55)
- 速递查询 (52)