可以与 FastAPI 不分伯仲的 Python 著名的 Web 框架

正如你所理解的,任何领域都不可能停止进步,不断使用相同的工具意味着不思进取。这一点在信息技术领域,尤其是网络开发行业非常明显。

关于网络框架,不论是 Django 和 Flask 等传统框架还是 Python 的新型高级框架,一直有着新的框架不断出现,它们正在挤掉传统和成熟的技术,它们特征更好、编码更方便、更简单、更快捷。

众所周知的 Python web 框架

Django

该网络框架是最流行的 Python 网络框架之一。它能让开发变得简单,编写易于理解的代码,并快速适应开发。Django 支持与 MySQL、SQLite、PostgreSQL 和 Oracle 等主流数据库协同工作,还可以使用第三方驱动程序。它提供了一个抽象层,无需编写 SQL 查询来获取/保存数据到数据库。Django 的功能包括身份验证、URL 路由、模板引擎、对象关系映射器(ORM)和数据库模式迁移(Django v.1.7 +)。

如果您选择 Django,就不必担心功能不足。从模板引擎到对象关系映射,您将从这个框架中获得您所期望的一切。最重要的是,它是免费开源的。

Flask

Flask 是一个微型框架,因此更注重工作的简单性和快速构建必要网络服务的能力。与其他框架相比,Flask 的配置和安装时间更短;HTTP 功能的抽象层级更低。Flask 的灵感来自 Sinatra Ruby 框架。Flask 的核心理念是为网络应用程序打下坚实的基础。它有许多有用的功能:内置开发服务器和快速调试器、Jinja2 模板、支持安全 cookies 以及连接任何 ORM 的能力。它既适合初级网络开发人员,也适合希望使用最佳实践、实现快速原型设计和创建独立应用程序的专家。

Bottle

Bottle 是一个非常轻量级的框架,只需一个文件即可完成。尽管它非常简约,但 Bottle 提供了相当丰富的功能,100% 可满足中小型项目的需求。

它包含了干净的 URL 路由,而模板则是该框架的强项。实用工具(即 “瓶子”)可方便地访问数据表格、文件上传、标题和其他与 HTTP 相关的元数据。它内置了一个 HTTP 开发服务器,支持 fapws3、bjoern、GAE、CherryPy 和其他任何支持 WSGI 的 HTTP 服务器。

对于原型设计、学习如何组织网络框架以及创建简单的应用程序来说,这几乎是一个完美的解决方案。

后起 web 框架

现在,我们将简要介绍一些 Python Web 框架,以便了解有哪些新的解决方案。对待任何新框架都需要给予关注和尊重。首先,建议您在试点项目中试用新框架,研究它的优缺点,踩几脚耙子,然后才将其用于客户的商业项目中。

Sanic

Sanic 是一个 Python 3.8+ Web 服务器和 Web 框架,旨在快速运行。它允许使用 Python 3.5 中添加的 async/await 语法,这使您的代码非阻塞且快速。

在 Python 3.5 中,有一个使用 async/await 来构建异步程序的新机会,Sanic 巧妙地利用了这一机会。这可能是目前为 Python 提供快速、可扩展 Web 服务器和集成 Web 框架的最简单、最方便的方法。该框架支持与路由器、各种格式(当然还有 JSON)和版本、异常处理、网络套接字、流式传输等的便捷协作。

特征:

Sanic 有意打造一个干净且不带偏见的功能列表。该项目不想要求您以某种方式构建应用程序,并试图避免规定特定的开发模式。社区构建和维护了多个第三方插件,以添加无法满足核心存储库要求的附加功能。

为了帮助 API 开发人员,Sanic 组织维护了一个名为 Sanic Extensions 的官方插件,以提供各种好处,包括:

  • 使用 Redoc 和/或 Swagger 的 OpenAPI 文档
  • CORS 保护
  • 依赖注入到路由处理程序中
  • 请求查询参数和正文输入验证
  • 预定义的、特定于端点的响应序列化器

示例:

pip install sanic

我们创建 server.py 文件并粘贴以下内容:

from sanic import Sanic
from sanic.response import text

app = Sanic("MyHelloWorldApp")

@app.get("/")
async def hello_world(request):
    return text("Hello, world.")

然后在控制台中运行以下命令:

sanic server

Starlette

Starlette 将自己定位为性能极高的轻量级框架或工具包。非常适合用 Python 构建异步 Web 服务。

该框架基于异步服务器网关接口(ASGI),可作为其工具包使用。同时,它还支持 WebSocket、GraphQL、Session 和 Cookie。开发人员声明不与其他解决方案硬性绑定(零硬性依赖),并保证 100% 的测试覆盖率和 100% 的类型注释代码库。

特点:

  • 一个轻量级、低复杂度的 HTTP Web 框架
  • WebSocket 支持
  • 进程内后台任务
  • 启动和关闭事件
  • 基于 httpx 构建的测试客户端
  • CORS、GZip、静态文件、流响应
  • Session 和 Cookie 支持
  • 100% 测试覆盖率
  • 100% 类型注释代码库
  • 很少有硬依赖
  • asynciotrio 后端兼容

示例:

pip install starlette uvicorn

我们创建一个 server.py 文件并写入以下代码:

from starlette.applications import Starlette
from starlette.responses import JSONResponse
from starlette.routing import Route

async def homepage(request):
    return JSONResponse({'hello': 'world'})

routes = [
    Route("/", endpoint=homepage)
]

app = Starlette(debug=True, routes=routes)

然后,我们在控制台中运行以下命令:

uvicorn server:app

如果您的项目需要可靠的执行,并且对构建系统的组件有很高的要求,那么这一点就非常重要。该框架需要 Python 3.6 以上版本才能安装和运行。您还需要安装 ASGI 服务器,如 uvicorn、daphne 或 hypercorn。

Masonite

Masonite 是适用于 Python 的全新网络框架,是为开发人员创建的最佳框架之一。该框架的创建者坚持认为它具有更好的可扩展性,这从根本上将该解决方案变成了一个优秀的框架,可在未来为您的项目添加各种附加功能。它是新手开发者的理想选择,但对这一领域的专家也很有用。Masonite 具有简单的路由机制。可以使用 Active Record ORM。该框架已可在 Python 3.4+ 环境下使用最新版本的 OpenSSL 和 Pip3。

FastAPI

如果您项目的主要任务是支持 OpenAPI,那么您可以使用快速可靠的 FastAPI 框架。据开发人员称,FastAPI 的速度可与 NodeJS 和 Go 相媲美。

此外,该框架还能立即提供自动交互式文档。它使用 Python 3.6+、Starlette(用于网页部分)、Pydantic(用于数据部分)和 uvicorn(用于加载和服务应用程序的服务器)。

Falcon

Falcon 是一个可靠、高性能的 Python Web 框架,用于构建大规模应用程序后端和微服务。它可以与任何 WSGI 服务器配合使用,鼓励 REST 架构风格,并尝试在保持高效的同时尽可能少地完成工作。

Falcon 用尽可能少的代码保持高效的性能。

示例:

pip install falcon, uvicorn

我们创建一个 server.py 文件并写入如下代码内容:

import falcon
import falcon.asgi

class ThingsResource:
    async def on_get(self, req, resp):
        """Handles GET requests"""
        resp.status = falcon.HTTP_200
        resp.content_type = falcon.MEDIA_TEXT
        resp.text = (
            '\nTwo things awe me most, the starry sky '
            'above me and the moral law within me.\n'
            '\n'
            '    ~ Immanuel Kant\n\n'
        )


app = falcon.asgi.App()

things = ThingsResource()

app.add_route('/things', things)

然后在命令行中使用如下命令进行启动:

uvicorn server:app

Responder

由于众所周知的原因,Responder 以 Starlite 为基础,允许用户使用 jinja2 模板引擎(无需额外导入)构建 ASGI 应用程序,并预装可正常运行的静态文件服务器。为了与网络服务器协同工作,我们使用了 uvloop,它能以 gzip 压缩方式自动处理请求。

作者称该框架结合了 Flask 和 Falcon 的两种成功方法。一方面,它使用 Flask 风格的路由表达式,另一方面,它使用 Falcon 的方法 “每个请求和响应都被传递到每个视图中并发生变化”。重要的是,框架自带内置测试客户端。

Molten

Molten 是一个最小化、可扩展、快速且高效的框架,用于使用 Python 构建 HTTP API。Molten 的特点包括:根据预定义模式自动验证请求、依赖注入、支持基于函数的中间件、配置文件、Prometheus 指标、请求 ID、会话、SQLAlchemy、模板、WebSockets 等。此外,Molten 还是类型安全的。该项目文档齐全,并有作者提供支持。

Python Klein

Klein 是一个微型框架,用于使用 Python 开发生产就绪的网络服务。它基于 Werkzeug 和 Twisted 等广泛使用且久经考验的组件构建。Klein 的应用程序接口非常简约,与 Bottle 和 Flask 相似,因此受到开发人员的推崇。它不依赖第三方库。Klein 还支持 Python 3.5+ 中的 async 和 await 关键字。Klein 还支持许多路由的统一错误处理代码。

Quart

这是一个非常有趣的框架,因为它支持 Flask 应用程序和 Asyncio 异步调用。通过这种组合,可以使用流行的 Flask 框架和 Python 3.5 的现代编程机制。Quart 支持 Flask 扩展,并能使用视频和 Websockets。Flask 有一个标准的迁移技术。Quart 支持完整的 ASGI 3.0 规范。Tox 支持测试。

BlackSheep

受 Flask 和 ASP.NET Core 的启发,BlackSheep 是一个异步 Web 框架,用于构建基于事件的非阻塞 Python 网络应用程序。此外,BlackSheep 还提供了一个可随时启动的 MVC 项目模板。

它具有与 FastAPI 类似的语法,并且可以与 Uvicorn 一起使用。正如文档所述,它也经过测试可以使用 Hypercorn 作为 ASGI HTTP 服务器(即 uvicorn)。

特征:

  • 丰富的代码 API,具有自动绑定和依赖注入功能
  • 提供了处理身份验证和授权的策略。
  • 编写友好的代码库,借助 IDE 编码时的提示,可提供舒适的开发体验
  • 内置生成 OpenAPI 文档,支持版本 3、YAML 和 JSON
  • 跨平台框架,使用最现代版本的 Python
  • 良好的性能表现

示例:

pip install blacksheep uvicorn

创建 server.py 文件,并写入如下的代码:

from datetime import datetime
from blacksheep import Application


app = Application()

@app.route("/")
def home():
    return f"Hello, World! {datetime.utcnow().isoformat()}"

然后,我们在控制台中运行以下命令:

uvicorn server:app --port 44777 --reload

这个高性能框架将核心软件包保持在最低水平,并尽可能专注于 HTTP 和 HTML 标准中定义的功能。它允许开发可在云中部署的无状态应用程序。

Cyclone

Twisted 是 Python 的一个事件驱动网络编程框架,Cyclone 利用它为网络框架构建了 Tornado API。Cyclone 是最稳定可靠的非阻塞 I/O 网络框架。它提供了用于操作 HTTP 头信息和 URL 的 httputil。Cyclone 支持国际化、内联 SQLite、非阻塞 Redis 客户端、使用 OpenID 和 OAuth 的第三方登录、XML 和 JSON 编码的远程过程调用,以及许多其他功能。

Pyramid

Pyramid 是一个开源 Python 网络框架。其主要目标是以最低的复杂度构建网络应用程序。

Pyramid 既适用于小型应用程序,也适用于大型应用程序。Pyramid 的特点包括可以构建单文件应用程序、使用全面的模板和资产规范、灵活的身份验证和授权。它拥有强大的测试、支持和全面的数据文档。Pyramid 提供函数装饰器、谓词和呈现器。

Robyn

Robyn 是一个快速异步 Python Web 框架,配有一个用 Rust 编写的 Web 服务器。

特征:

  • 认证与授权
  • 中间件
  • 跨域资源共享
  • WebSockets
  • 子路由器
  • 视图
  • 使用 Jinja2 进行模板化
pip install robyn

简单 Hello World 示例:

from robyn import Robyn

app = Robyn(__file__)

@app.get("/")
async def h(request):
    return "Hello, world!"

app.start(port=8080)

然后,我们在控制台中运行以下命令:

python3 app.py

LiteStar

Litestar 是一个强大、灵活、高性能且独特的 ASGI 框架。

特征:

  • 插件
  • 附带依赖注入
  • 安全原语
  • OpenAPI 模式生成
  • 消息包、中间件
  • 出色的 CLI 体验

示例:

pip install litestar[standard]

我们创建 app.py 文件并写入以下代码:

from litestar import Litestar, get  
  
  
@get("/")  
async def index() -> str:  
    return "Hello, world!"  
  
  
@get("/books/{book_id:int}")  
async def get_book(book_id: int) -> dict[str, int]:  
    return {"book_id": book_id}  
  
  
app = Litestar([index, get_book])

然后,我们在控制台中运行以下命令:

litestar run uvicorn app:app --reload

Emmett

Emmett 是一个全栈 Python Web 框架,设计时考虑到了简单性。

Emmett 的目标是易于理解、易于学习和使用,以便您可以完全专注于产品的功能。

特点:

  • 路由系统
  • 模板系统
  • Websockets
  • 验证
  • Forms 生成
  • Sesions
  • 权限系统
  • 缓存
  • ORM

示例:

pip install emmett

我们创建一个 app.py 文件并写入以下代码:

from emmett import App

app = App(__name__)

@app.route("/")
async def hello():
    return "Hello world!"

然后,我们在控制台中运行以下命令:

emmett develop

总结

时至今日,很难说能有哪个框架会取代古老而优秀的 Django、Flask 和 Bottle。但是技术在不断发展和进步,尤其是 Python 的网络框架层出不穷,有着大量的优秀 Web 框架。通过不断学习,选择在实际业务中使用更准确、更高效的网络应用程序开发框架,并提供新的改进功能。

本文分享这么多框架,也可以看到其中很多框架有着几乎类似的语法,如果对其中一种框架很熟悉,那么也会很容易使用其他框架。

希望能对你有所帮助,觉得文章有用,请点个赞支持一下,谢谢~

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方CSDN官方认证二维码免费领取保证100%免费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/556624.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

开源项目|使用go语言搭建高效的环信 IM Rest接口(附源码)

项目背景 环信 Server SDK 是对环信 IM REST API 的封装, 可以节省服务器端开发者对接环信 API 的时间,只需要配置自己的 App Key 相关信息即可使用。 环信目前提供java和PHP版本的Server SDK,此项目使用go语言对环信 IM REST API 进行封装…

B端:再探列表页,这20个组件能让列表页功能完备,体验过关。

有很多小伙伴反馈设计列表页的时候,好看是好看了,但是用户体验不佳,处理数据十分不方便,这样好看也就失去了意义,贝格前端工场分析这个原因大概率是没有用好列表页的组件,丢三落四的情况比较多导致的&#…

RK3588 Android13 鼠标风格自定义动态切换

前言 电视产品,客户提供了三套鼠标图标过来,要求替换系统中原有丑陋风格且要支持动态切换, 并且在 TvSetting 中要有菜单,客户说啥就是啥呗,开整。 效果图 test framework 部分修改文件清单 png 为鼠标风格资源图片,这里就不提供了,可自由找一个替换一下就行 framew…

「Word 论文排版」插入分节符导致word转PDF后出现空白页

问题 word转PDF后出现空白页 解决 但是此方法会让页面页脚标记出错 TODO 如下图所示 在论文目录后有一个分节符,转成PDF之后就多了一个空白页 文件-打印-页面设置-选中封面那一页-版式-从偶数页开始 再导出空白页就没了

旅游陪同翻译难吗, 旅游翻译英译中哪家好?

近来,随着中国旅游业的蓬勃发展,旅游陪同翻译的需求也水涨船高,这些专业的翻译服务者为中外游客搭建起友谊的桥梁,引领他们共同探索中国这片古老而神秘的土地 。那么,旅游陪同翻译英译中难吗?我们如何在众多…

iTwin Capture Modeler-23中文版下载地址及安装教程

文章目录 一、iTwin Capture Modeler23中文版安装教程二、iTwin Capture Modeler23中文版下载地址一、iTwin Capture Modeler23中文版安装教程 1. 解压安装包。订阅专栏(可获取专栏内所有文章阅读权限与软件安装包)后,从文末获取安装包解压,如下所示: 2. 右击安装包,选择以…

MQ技术选型

消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。它可以实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。 RabbitMQ 特点: RabbitMQ 相当轻量级的消息队列&#xff…

探索 2024 年促进业务发展的最佳定制 GPT

打造个性化客户体验: GPT模型在电子商务中的应用 介绍 在商业领域,人工智能(AI)的出现开创了创新和效率的新时代。 最具影响力的人工智能技术之一是自定义 GPT 模型。 本文探讨了自定义 GPT 模型如何显着促进各种业务运营。 自定义 GPT 模型的…

零售数据分析之补货表怎么做?

做零售数据分析,不仅要关注销售,还需要注意补货分析。通过补货分析了解不同商品要在什么时候进行补货,提前做好库存准备,以免出现补货不及时的失误。那么,零售数据分析中的补货表该怎么做?需要计算分析哪些…

Embedding例子:简单NN网络、迁移学习例子

一、简单例子:构造简单NN网络生成Embedding 1、pytorch例子 2、tensorflow例子 # 1导入模块 import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Embedding import numpy as np# 2构建语料库 corpus[[…

前端框架深度技术革新历程:从原生DOM操作到数据双向绑定、虚拟DOM等框架原理深度解析,Web开发与用户体验的共赢

前端的发展与前端框架的发展相辅相成,形成了相互驱动、共同演进的关系。前端技术的进步不仅催生了前端框架的产生,也为其发展提供了源源不断的动力。 前端的发展 前端,即Web前端,是指在创建Web应用程序或网站过程中负责用户界面…

爱普生无源晶体MC-146特点,应用介绍

爱普生的MC-146系列产品,应用广泛,如小的通讯社本,工业控制等等,几乎涉及各个领域。属于现阶段性价比非常不错的一个系列。晶体振荡器有很多种类,无源晶体其中最简单的一个类。在每个设计中,要用到非常多的…

LabVIEW供热管道泄漏监测与定位

LabVIEW供热管道泄漏监测与定位 在现代城市的基础设施建设中,供热管道系统起着极其重要的作用。然而,管道泄漏问题不仅导致巨大的经济损失,还对公共安全构成威胁。因此,开发一种高效、准确的管道泄漏监测与定位技术显得尤为关键。…

Mac 部署 GPT-2 预训练模型 gpt2-chinese-cluecorpussmall

文章目录 下载 GPT-2 模型快速开始 GPT-2 下载 GPT-2 模型 https://huggingface.co/uer/gpt2-chinese-cluecorpussmall git clone https://huggingface.co/uer/gpt2-chinese-cluecorpussmall # 或单独下载 LFS GIT_LFS_SKIP_SMUDGE1 git clone https://huggingface.co/uer/gpt…

清洗机什么牌子好质量过硬、四大公认最好用的超声波清洗机

现在十个人中有九个人都是戴眼镜的,眼镜已成为我们生活中不可或缺的一部分。无论是用于视力矫正,还是作为时尚配饰,眼镜都承载着重要的角色。然而,很多人在享受眼镜带来便利的同时,却忽视了对眼镜的适当清洁和维护。殊…

Trivy离线扫描:容器安全实践指南

一、Trivy简介 1.1 Trivy 概述 Trivy 是一款全面多功能的安全扫描器。Trivy具有寻找安全问题和目标的扫描器。现已经被 Github Action、Harbor 等主流工具集成,Trivy支持大多数流行的编程语言、操作系统和平台的扫描,应该是该领域目前目前采用最广的开…

数据可视化插件echarts【前端】

数据可视化插件echarts【前端】 前言版权开源推荐数据可视化插件echarts一、如何使用1.1 下载1.2 找到js文件1.3 入门使用1.4 我的使用 二、前后端交互:入门demo2.1 前端htmljs 2.2 后端entitycontrollerservicemapper 三、前后端交互:动态数据3.1 前端j…

ChatGPT AI 教我用python实现工作久坐定时提醒工具,防猝死!

日常工作学习久坐的危害很大,非常伤害颈椎和腰椎,严重危害上班族的身体健康,强烈建议久坐后间隔一小时活动一下,最好是能够调整好自己坐姿,行为举止一定要正确,为了您的老腰! 久坐一族&#xff…

Linux——日志的编写与线程池

目录 前言 一、日志的编写 二、线程池 1.线程池基本原理 2.线程池作用 3.线程池的实现 前言 学了很多线程相关的知识点,线程控制、线程互斥、线程同步,今天我们将他们做一个总结,运用所学知识写一个较为完整的线程池,同时…

mac: docker安装及其Command not found: docker

已经安装了docker desktop,没安装的 点击安装 傻瓜式安装即可 接着打开终端:好一个 Comand not found:docker 看我不把你整顿,解决如下: 如果你在 macOS 上安装了 Docker Desktop,但是终端无法识别 docker 命令&…