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

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

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

众所周知的 Python web 框架

Django

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 Sanicfrom sanic.response import textapp = 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% 类型注释代码库;

  • 很少有硬依赖;

  • 与 asyncio 和 trio 后端兼容。

示例:

pip install starlette uvicorn

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


from starlette.applications import Starlettefrom starlette.responses import JSONResponsefrom starlette.routing import Routeasync 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 falconimport falcon.asgiclass ThingsResource:async def on_get(self, req, resp):"""Handles GET requests"""resp.status = falcon.HTTP_200resp.content_type = falcon.MEDIA_TEXTresp.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、Quart、

BlackSheep、Emmett等方面的内容~

最后感谢每一个认真阅读我文章的人,下方这份完整的软件测试教程已经整理上传完成,需要的朋友们可以文末自行领取:【保证100%免费】

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Semantic Kernel进阶:将ChatCompletion(聊天完成)服务添加到你的AI项目(三)

文章目录 Semantic Kernel进阶:将聊天完成服务添加到你的AI项目一、引言二、聊天完成服务的重要性三、基本介绍3.1 创建聊天完成服务3.2 依赖注入方式3.3 创建独立的服务实例 四、实战4.1 检索聊天完成服务4.2 使用聊天完成服务4.2.1 非流式4.2.2 流式 4.3 完整代码…

Mybatis多对一查询的配置及两种方法的使用示例对比以及Mybatis一对多查询两种方法使用示例及对比

一、Mybatis多对一查询的配置及两种方法的使用示例对比 为了试验Mybatis多对一的查询,我们先在数据库中建两个表,一个城市表,一个市区表,一个城市有多个区是一个一对多的关系;多个区对应一个城市是一个多对一的关系。建…

第五届光学与图像处理国际学术会议(ICOIP 2025)征稿中版面有限!

第五届光学与图像处理国际学术会议(ICOIP 2025) 2025 5th International Conference on Optics and Image Processing (ICOIP 2025) 重要信息 时间地点:2025年4月25-27日丨中国西安 截稿日期:2024年12月16日23:59 …

vue3项目使用百度地图实现地图选择功能代码封装(开箱即用)

vue3项目使用百度地图实现地图选择功能代码封装方案(开箱即用) <template><div class="bmapgl">

【软件测试】JUnit

Junit 是一个用于 Java 编程语言的单元测试框架&#xff0c;Selenium是自动化测试框架&#xff0c;专门用于Web测试 本篇博客介绍 Junit5 文章目录 Junit 使用语法注解参数执行顺序断言测试套件 Junit 使用 本篇博客使用 Idea集成开发环境 首先&#xff0c;创建新项目&#…

一图解千言,了解常见的流程图类型及其作用

在企业管理、软件研发过程中&#xff0c;经常会需要进行各种业务流程梳理&#xff0c;而流程图就是梳理业务时必要的手段&#xff0c;同时也是梳理的产出。但在不同的情况下适用的流程图又不尽相同。 本文我们就一起来总结一下8 种最常见的流程图类型 数据流程图 数据流程图&…

【CTF-SHOW】Web入门 Web14 【editor泄露-详】【var/www/html目录-详】

editor泄露问题通常出现在涉及文件编辑器或脚本编辑器的题目中&#xff0c;尤其是在Web安全或Pwn&#xff08;系统漏洞挖掘&#xff09;类别中。editor泄露的本质是由于系统未能妥善处理临时文件、编辑历史或进程信息&#xff0c;导致攻击者可以通过某种途径获取正在编辑的敏感…

javaweb-mybatis之动态sql

(1).if标签 编写好方法之后&#xff0c;选中方法名&#xff0c;alt回车&#xff0c;选第一个generate statement快捷生成xml里的标签 (2).foreach标签 用于批量删除 (3)sql和include标签

架构师面试:怎样规划公司的监控架构?

大家好&#xff0c;我是君哥。 监控系统在科技公司非常重要&#xff0c;它可以让运维人员和研发人员提前发现问题、定位问题&#xff0c;进而解决问题。 在我们实际工作中&#xff0c;使用的监控往往五花八门&#xff0c;比较混乱&#xff0c;今天来聊一聊怎么规划公司的监控…

QT开发:深入掌握 QtGui 和 QtWidgets 布局管理:QVBoxLayout、QHBoxLayout 和 QGridLayout 的高级应用

目录 引言 1. QVBoxLayout&#xff1a;垂直布局管理器 基本功能 创建 QVBoxLayout 添加控件 添加控件和设置对齐方式 设置对齐方式 示例代码与详解 2. QHBoxLayout&#xff1a;水平布局管理器 基本功能 创建 QHBoxLayout 添加控件 添加控件和设置对齐方式 设置对齐…

【CTF刷题9】2024.10.19

[MoeCTF 2021]babyRCE 考点&#xff1a;关键词过滤&#xff08;绕过方法参考往期博客&#xff09; 来源&#xff1a;nssctf <?php$rce $_GET[rce]; if (isset($rce)) {if (!preg_match("/cat|more|less|head|tac|tail|nl|od|vi|vim|sort|flag| |\;|[0-9]|\*|\|\%|\&g…

京存助力北京某电力研究所数据采集

北京某电力研究所已建成了一套以光纤为主&#xff0c;卫星、载波、微波等多种通信方式共存&#xff0c;分层级的电力专用的网络通信架构体系。随着用电、配电对网络的要求提高&#xff0c;以及终端通信入网的迅速发展&#xff0c;迫切地需要高效的通信管理系统来应对大规模、复…

Kaggle竞赛——森林覆盖类型分类

目录 1. 竞赛简要2. 数据分析2.1 特征类型统计2.2 四个荒野区域数据分析2.3 连续特征分析2.4 离散特征分析2.5 特征相关性热图2.6 特征间的散点关系图 3. 特征工程3.1 特征组合3.2 连续特征标准化 4. 模型搭建4.1 模型定义4.2 绘制混淆矩阵和ROC曲线4.3 模型对比与选择 5. 测试…

python爬虫案例——selenium爬取淘宝商品信息,实现翻页抓取(14)

文章目录 1、任务目标2、网页分析3、代码编写3.1 代码分析3.2 完整代码1、任务目标 目标网站:淘宝(https://www.taobao.com/) 任务要求:通过selenium实现自动化抓取 淘宝美食 板块下的所有商品信息,并实现翻页抓取,最后以csv格式将数据保存至本地;如: 2、网页分析 首先…

Qt-系统文件相关介绍使用(61)

目录 描述 输⼊输出设备类 打开/读/写/关闭 使用 先初始化&#xff0c;创建出大致的样貌 输入框设置 绑定槽函数 保存文件 打开文件 提取文件属性 描述 在C/C Linux 中我们都接触过关于文件的操作&#xff0c;当然 Qt 也会有对应的文件操作的 ⽂件操作是应⽤程序必不…

wpf grid 的用法

WPF中的Grid是一种布局控件&#xff0c;可用于将子控件按照行和列的方式排列。 以下是Grid控件的用法&#xff1a; 在XAML文件中&#xff0c;添加一个Grid控件&#xff1a; <Grid> </Grid>在Grid控件中&#xff0c;添加行和列定义&#xff1a; <Grid><…

Spring Cloud-Nacos版 学习理解

注册中心 Nacos 下载安装包 bin目录输入 cmd 进入命令行&#xff0c;输入startup.cmd -m standalone 启动 浏览器输入 http://127.0.0.1:8848/nacos/index.html&#xff0c;进入启动页面 账号密码均默认nacos 服务提供者 NacosProvider、服务调用者 NacosConsumer 服务提…

第五届计算机、大数据与人工智能国际会议(ICCBD+AI 2024)

第五届计算机、大数据与人工智能国际会议&#xff08;ICCBDAI 2024&#xff09;将于2024年11月1日-3日在江西景德镇召开。本届会议由景德镇陶瓷大学主办&#xff0c;西安交通大学、暨南大学、南京邮电大学、长沙学院、景德镇学院、ELSP&#xff08;爱迩思出版社&#xff09;、E…

Python Django 数据库优化与性能调优

Python Django 数据库优化与性能调优 Django 是一个非常流行的 Python Web 框架&#xff0c;它的 ORM&#xff08;对象关系映射&#xff09;允许开发者以简单且直观的方式操作数据库。然而&#xff0c;随着数据量的增长&#xff0c;数据库操作的效率可能会成为瓶颈&#xff0c…

使用 PyTorch 构建 LSTM 股票价格预测模型

目录 引言准备工作1. 训练模型&#xff08;train.py&#xff09;2. 模型定义&#xff08;model.py&#xff09;3. 测试模型和可视化&#xff08;test.py&#xff09;使用说明模型调整结论 引言 在金融领域&#xff0c;股票价格预测是一个重要且具有挑战性的任务。随着深度学习…