LWN:Pallets项目集的新版本!

《Flask入门 》第一章:路由 Flask入门 route与render_templates Flask是palletsproject的一个优秀开源项目。区别于Django的是Flask相比简洁,例如Django需要创建多个目录和文件才能构建一个app,而Flask只需要短短几行就可以构建app.也不是说django不好,只是django对更多应用做了扩展优化,方便以后的制作,但对于初学者却并不太友好。让我们一起学习基于Werkzeug的Flask吧 ... 阅读详情

关注了就能看到更多这么棒的文章哦~

A bunch of releases from the Pallets projects

By Jake Edge
May 19, 2021
DeepL assisted translation
https://lwn.net/Articles/856518/

5 月 11 日,Python 实现的 Flask web microframework 项目发布了一个重要版本 Flask 2.0,但不仅如此。虽然 flask 可能过于光彩夺目吸引眼球了,但其实它是一批共同合作来为各种 web 开发提供解决方案的 library 中的一个。所有这些 library 在一起被称为 Pallets project。这是第一次把 Pallets 包含的所有六个 library 同时发布出来,并且每个 library 都是新发布了一个主要版本。这次的新版本抛弃了对 Python 2 的支持,同时也吸收了许多新东西。

Pallets

Flask 相当有名,以前也在 LWN 介绍过,但 Pallets 这个项目却有点不够知名,至少对我来说以前并不了解。Jinja2 template engine(模板引擎),是一个 Flask 中使用了的 Pallets 组件,它也是相当知名的,但其他几个 library 就不那么为人熟知了。唯一一个我还听说过的 library 就是支持 Web Server Gateway Interface(WSGI)application 的 Werkzeug 库,是用来连接 Flask 应用程序和 Web 服务器的。

Pallets 上还有三个 library,但规模都比较小,也比较专业。其中的 MarkupSafe 提供了一个文本对象,可以针对 HTML 来转义字符;ItsDangerous 则提供了用来在可信和不可信环境之间移动的数据进行加密签名的 helper 功能;还有命令行界面创建工具包(Command Line Interface Creation Kit),名为 Click,用于 "用尽量少的代码来组合起来创建漂亮的命令行界面"。统一协调后,正式版本发布是在 Pallets 博客上宣布的。它是基于过去两年的工作,尽管在这个时间段内还有其他一些主要版本(例如 2019 年 7 月的 Flask 1.1,2020 年 1 月的 Jinja 2.11,2020 年 2 月的 Werkzeug 1.0)。除了上面提到的 Flask 2.0,该版本还包括:

  • Werkzeug 2.0

  • Jinja 3.0

  • Click 8.0

  • ItsDangerous 2.0

  • MarkupSafe 2.0

所有这些项目现在都只支持 Python 3.6 及以上版本,这是 Pallets 早在 2019 年底就已经宣布的计划。"删除兼容性代码使得代码执行速度更快,同时也更容易维护和方便代码贡献者。" 另一个多个版本共同支持的功能是 type annotation,已经在这几个 library 中都得到了支持。除此之外还利用各种工具在整个代码库上采用了一致的代码风格。

Changes

Flask 支持了异步视图(asynchronous views)和 error handler,所以可以用 async def 来定义函数,Flask 会起一个单独的线程来运行此函数。目前还不完全清楚 Flask 针对 async 会增加多大程度的支持,因为 Quart 项目之前已经用 Flask API 提供了一个异步的 web framework。Quart 的开发者 Philip Jones 是 Pallets 的维护者之一,他在 2019 年写了一篇关于这个主题的博文,并在 GitHub 上提交了一个申请在 Flask 中实现 async 的 issue。

Blueprints 现在可以在 Flask 2.0 中嵌套使用了,这为管理各种 web application 提供了更多灵活性。开发模式下的服务程序(即通过 "flask run" 运行的)的 error handling 得到了改善,不会再推迟报出它启动时检测到的错误。"flask shell" 在 Flask 应用程序的上下文中提供了一个 Python 的 REPL 环境,现在如果启用了 Readline 的话就可以按 Tab 键补全。

Werkzeug 2.0 的几项重点更新使其可以更灵活地支持 async。本地变量会用 ContextVar 类型来管理,这样它们就可以在 coroutine 之间共享,而不仅仅是在线程之间共享了。Flask 的 Request 和 Response 这两个 class 进行了重构,删除了 BaseRequest/Response 这些父类,并将所有的混合工作移到这些(现在)基类中。此外,正在创建一个新的 API,从而可以从这些 class 中移除那些依赖于 WSGI 或 I/O 操作的代码。"这将使我们能够在未来更好地支持 sync 和 async 的使用场景"。具体来说,Quart 和其他异步服务器网关接口(ASGI)framework 也能使用 Werkzeug 了。

此外,从 Werkzeug 返回的许多 datetime 对象现在都可以支持时区了。用来上传文件的 multipart/form-data 的解析功能得到了显著改善,性能提高了 15 倍。URL routing 现在可以支持 WebSocket 方案了(ws://和 wss://);这个 library 没有直接支持 WebSocket,但这个功能就能允许 prect 使用 Werkzeug routing。

Jinja 3.0 版本发布之后,不需要打 patch 就可以支持 async 环境和 render 了。此外,NativeEnvironment(允许模板产生本地 Python 类型,而不仅仅是字符串)也被修改了,可以支持 async 环境。模板中的 block 现在可以被标记为 required,这意味着它们在模板层次结构中某个地方一定得定义这个 block。translation contexts(通过 pggettext 和 npgettext 使用)现在可以用来确定 i18n extension 中的字符串的翻译结果了。

Click 8.0 对参数处理进行了许多改进,这对一个构建命令行工具的 toolkit 来说是很有意义的。tab 补全功能也被完全重写了,从而允许每个 "command、group、parameter 和 type 支持自定义的补全";补全功能还有其他改进。支持使用 256 色调色板指定颜色或使用 RGB 值,以及支持了斜体、删除线和其他文本效果。帮助文本的格式得到了改进,针对用户的提示信息现在可以进行翻译了。

ItsDangerous 提供了一种易于使用的机制来对 cookie 值等东西进行签名,在 2.0 版本中增加了对 key rotation 的支持。可以传入一个密钥列表,按时间顺序排序,最新的一个将被用来进行签名,而验证签名时会尝试所有这些密钥。它的 datetime 对象也增加时区的支持。

MarkupSafe 2.0 为各种不同的 Python 版本、操作系统和体系架构增加了一系列的二进制支持,总共有 33 种组合。

上面这些概述仅仅触及了这些库中引起我的关注的一些改动。可以仔细看一下公告,以及非常详细的更新日志,会发现很多其他改进细节。

History

除了都是用来开发 Web application 的好用工具之外,Pallets 项目们还有一个共同点:它们都是由 Armin Ronacher 发起的,他在 Python 社区中一直是一个多产的贡献者。在他发表了一个愚人节笑话 并形成了 Flask 整整六年之后,他在一篇博文中介绍了 Pallets 项目:

2010 年 4 月 1 日,我发布了一个名为 denied 的玩笑性 microframework,它嘲笑了当时所有的那些不管理依赖关系并且将所需一切都塞在一个 Python 文件中的 microframework。我当时所做的就是将 Jinja2 和 Werkzeug 以 base64 编码的 zip 文件的形式塞到了 framework 中唯一的 Python 文件中。人们对它的反应很有趣,因为一方面,很多人并不真正理解这是一个愚人节的玩笑,另一方面,在另一个讨论中,没有一个微型框架真正使用 dependency 关系甚至鼓励使用。

一个月后,出现了一个名为 "Flask" 的新项目,它实际上就是认真实现了这个概念。它推出时的口号是 "基于 Werkzeug、Jinja 2 和良好意愿的 Python 微框架 ",六年后,它成为了 GitHub 上最受欢迎的 Python 框架。

今天,Ronacher 仍然参与在 Pallets 之中,还有和他一起创办 Pallets 的其他三个人,以及后来加入的更多人员,比如 Jones。这七个人自然得到了许多其他开发人员的支持。"参与人员的总名单要长得多,因为 Pallets 包含了多年来许多开发人员的无数贡献。" 与几乎所有的项目(或多个项目组合)一样,如果读者对某个 library 感兴趣,Pallets 将会非常欢迎更多贡献者加入进来。

全文完
LWN 文章遵循 CC BY-SA 4.0 许可协议。

欢迎分享、转载及基于现有协议再创作~

长按下面二维码关注,关注 LWN 深度文章以及开源社区的各种新近言论~

Pandas入门教程(二十二):股票数据分析实战——yfinance 获取数据、技术指标与收益率分析 把 Pandas 用在真实场景,才能体会它的价值。本文以茅台股票为例,用 yfinance 获取历史行情,完成缺失值处理与列筛选,绘制收盘价曲线,计算 SMA 移动平均线与 RSI 相对强弱指数,并通过日收益率、累计收益率和波动率完成完整的量化分析流程。 阅读详情

相关推荐

人脸关键点定义汇总

前几天看一份代码临时需要找49个人脸关键点位置定义的图片发现怎么百度都搜不到,最后幸好谷歌可以使用了就用谷歌搜到了。所以在这里汇总一下我所知道的人脸关键点的定义和相关的一点东西,以备不时之需。 68个关键点 最常用的工具是Dlib,网址:http://dlib.net/ dlib的68个特征点检测算法是ERT算法【1】 使用dlib检测68个特征点的python示例见:http://dlib.n...

程序媛 7642

python学习笔记——flask之渲染模板(Jinja2)过滤器

目录 一、案例展示 application.py index.html 二、原理解释 1.{{name | trim}}中name为传进来的变量名,trim为实现过滤功能的方法名,它俩之间一个竖杠 2.相当于 将name传进trim()方法里进行处理(过滤),return返回处理后的数据,作为{{ }}最终的结果。 三、过滤方法有哪些? 1.官方文档查看 2.过滤方法分类 3.注意:支持链式使用过滤器 四、自定义过滤器(过滤器就是一个函数) 自定义函数 注册过滤器方式一: ..

小橙子的博客 707

从零开始:用ADS 2023手把手教你设计2.4GHz Wi-Fi LNA(基于ATF-54143,附模型文件)

本文详细介绍了如何使用ADS 2023软件设计2.4GHz Wi-Fi频段的低噪声放大器(LNA),基于ATF-54143晶体管。内容涵盖模型导入、直流工作点确定、稳定性优化、噪声匹配等关键步骤,并提供可下载的模型文件包,帮助工程师快速掌握LNA设计技巧。

weixin_42531128的博客 320

快速上手Flask(一) 认识框架Flask、项目结构、开发环境

Flask是一个相对于Django而言轻量级的Web框架。

西京刀客 1570

10X Genomics数据实战:手把手教你用Seurat处理单细胞PBMC数据(附完整代码)

本文详细介绍了如何使用Seurat处理10X Genomics的单细胞PBMC数据,从数据获取、质控到降维分析和细胞分群的全流程。通过实战代码演示,帮助研究者掌握单细胞RNA测序数据分析的核心技术,提升对细胞异质性的理解。

weixin_29053577的博客 252

C#实战:5分钟搞定西门子S7-1200 PLC数据读写(S7netplus保姆级教程)

本文详细介绍了如何使用C#和S7netplus库快速实现与西门子S7-1200 PLC的数据读写。从环境准备、连接管理到数据读写高级技巧,提供了保姆级教程和实战方案,帮助开发者绕过常见陷阱,提升工业自动化项目的开发效率。

weixin_28432777的博客 283

【亲测免费】 推荐一款宝藏开源项目:Pallets Flask Website

Flask,这个熟悉的名字,是Python世界中著名的轻量级Web应用框架。而我们今天要推荐的并不是Flask本身,而是它的官方旧网站源码。尽管新的官网已经上线并迁移至[https://palletsprojects.com/p/flask/](https://github.com/pallets/website),但这款开源的旧版网站项目仍然值得一看,它揭示了Flask社区早期的构建理念和技术实...

gitblog_00012的博客 483

从BIN文件到可烧录程序:深入理解ADI DSP程序读取背后的原理与安全边界

本文深入探讨了ADI DSP程序从BIN文件到可烧录程序的转换原理与安全边界,详细解析了JTAG接口、仿真器工作流程及Flash存储结构。通过Visual DSP++工具,开发者可以理解程序读取的底层机制,同时强调了知识产权保护的重要性,为嵌入式开发提供了实用建议。

weixin_27956639的博客 263

AI全栈实战 | 3.9-01 爬虫入门:requests 加 BeautifulSoup 三分钟跑通,但 90% 的人栽在这 4 个“礼貌“问题上

⚠️:本文内容仅用于。请遵守目标站点的服务条款与相关法律法规,不得对目标服务造成负担,不得采集、传播个人隐私数据。技术是中性的,边界在你手里。爬虫的入门技术(requests 发请求 + BeautifulSoup 解析)三分钟就能学会。真正区分"会用爬虫"和"会做爬虫的人"的,是这篇我们跑通"请求→解析→存储"的最小闭环,然后重点把"合规与礼貌"这根弦给你绷上。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 390

【三维激光扫描】第二章:国内外三维激光扫描设备简介

地面三维激光扫描仪是地面激光扫描系统中最主要的硬件设备,近年来得到了快速发展,主要体现在品牌数量、性能指标、类型等方面的变化。本章主要介绍国内外主要设备的基本情况,对国内外研究现状进行分析,最后指出目前存在的问题与未来的发展趋势。 2.1 国外地面三维激光扫描仪简介 目前,生产地面三维激光扫描仪的公司比较多,随着地面三维激光扫描技术应用普及程度的不断提高,国外产品在中国的市场目前还占主导地位。它们各自的产品在性能指标上有所不同,以下简要介绍有代表性的公司产品。 2.1.1 奥地利 Riegl公司的.

智慧空间实验室 4641

【自然语言处理】情感分析(一):基于 NLTK 的 Naive Bayes 实现

朴素贝叶斯(Naive Bayes)分类器可以用来确定输入文本属于某一组类别的概率。例如,预测评论是正面的还是负面的。它是 “朴素的”,它假设文本中的单词是独立的(但在现实的自然人类语言中,单词的顺序传达了上下文信息)。尽管有这些假设,但朴素贝叶斯在使用少量训练集预测类别时具有很高的准确性。

Data · Model · Agent · Repeat 2173

从一段视频到可漫游的 4D 有声场景:思路拆解与最小复现手记

只需一段手机视频,你就能生成可"走进去"的 4D 有声场景:转头时狗叫声方向随之变化,走近时声音更清晰。本文拆解 Video-to-4DAVScene 的核心思路,手把手带你用几十行 Python 搭出最小管线,把视频中的运动物体变成带空间位置的声源,并附上三个真实踩坑的排障经验,代码可直接跑。🎧

helloagent的博客 229

YOLOv11改进,YOLOv11引入B2CNet的BFAM(双时相特征聚合模块),JSTARS 2024,二次创新C3k2结构

YOLOv11改进,YOLOv11引入B2CNet的BFAM(双时相特征聚合模块),JSTARS 2024,二次创新C3k2结构

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 406

Python+Agent入门笔记(二):列表推导式、模块和异常,这些写 Agent 前得会

接上一篇《Python+Agent入门笔记(一)》。基础语法跑通之后,这篇聊几块日常写脚本绕不开的东西。还是按 JS/Go 开发者的视角写,尽量记录我实际卡过的地方。

qq_41241612的博客 430

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

详解Python条件语句

在 Python 中,if...else 是一种条件语句,可以根据给定的条件执行不同的操作。这个语句通常用于控制程序的流程。

2601_96798737的博客 205

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

微调数据集构建:清洗、标注、格式转换完整流程

摘要解决微调数据直接抓取导致的噪声污染、模式崩溃与Token错位问题。适用于需为大模型SFT阶段构建高质量训练集的数据与算法工程师。读完可获得包含启发式清洗、MinHash去重及ChatML格式对齐的完整可运行数据流水线。关键词数据清洗、MinHash去重、数据标注、ChatML、SFT数据集、数据配比背景与问题大模型微调效果的上限由数据质量决定,直接使用未经处理的原始语料极易引发模型复读、幻觉与指令遵循能力退化。

2402_85729970的博客 486

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python3 协程:异步编程的核心机制与实战

协程是解决I/O密集型任务等待瓶颈的高效机制,相比线程更轻量、无锁开销。从yield到async/await的演进,使异步编程语义清晰、易于理解。通过async/await可实现并发执行多个任务(如gather、create_task),显著提升网络请求、爬虫等场景性能。关键在于使用异步库(如aiohttp)替代同步库,避免阻塞事件循环。合理控制超时与并发数,才能发挥协程最大优势。

Lxn2zh的博客 159

python如何控制浏览器

Python 可以通过 Selenium、Playwright 等工具实现浏览器自动化,从打开网页到执行复杂交互操作均可脚本化完成。Selenium生态成熟

2601_96797912的博客 76

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 267

torch.compile 差异仅 1e-6,边界样本预测为何翻转

torch.compile 加速后输出与 eager 不一致,部分预测翻转。逐层对比与 graph break 分析定位到动态分支翻转根因。容差回归仅适用于无分支翻转场景,零容忍场景应禁用编译。

昨日种种,皆成今我。今日种种,皆成新我。 158

Python 100讲课程导航:第08篇《Python input 与类型转换:构建可靠的交互程序》

本文详解Python中input()的返回类型为字符串,强调必须通过int()、float()等函数进行类型转换。重点讲解了输入验证的重要性,结合try-except处理ValueError等异常,实现可靠的交互程序。通过购物预算计算器实战,演示如何防范非法输入、处理边界值,并推荐使用Decimal避免浮点精度问题,提升程序健壮性。

铭渊老黄 133

【Python】国家中小学智慧教育平台电子教材批量下载与 PDF 合成实战

成果:两本语文电子课本(一年级上册 118 页 / 23MB、三年级上册 130 页 / 30.3MB),合计 248 页、约 54MB,单本下载加合成 40~60 秒,PDF 页数校验全部通过。经验教训SPA 站点的数据接口优先从 bundle 里挖,比抓页面稳得多;资源链接要按 private/public 分组看待,只取平台公开部分;页数、目录名这类“可推断”的信息,永远用实际响应验证一次;受限环境里“能不能跑浏览器”要在方案定稿前确认。后续计划:这版 PDF 是图片版,没有文字层;

木头大左的博客 123

魔塔社区微调训练Qwen2-1.5B-Instruct模型并烧录到‌RK3568开发板教程

本文基于Ubuntu 22.04 + CUDA 13.0.3环境,使用LLaMA-Factory框架对Qwen2-1.5B-Instruct模型进行LoRA微调,训练儿童故事生成专用模型。通过配置qwen模板、制作alpaca格式数据集、执行sft训练并合并LoRA权重,最终将模型转换为GGUF格式,并量化为Q4_K_M以适配RK3568嵌入式平台。全程支持国产镜像加速下载与显存优化,实现高效轻量化部署。

浅清秋慕夏的博客 185

【回眸】DeepSeek V4.1 Flash 快速上手与实战

本文介绍如何高效本地部署开源大模型,通过现代化工具链实现分钟级环境搭建。聚焦显存优化、一键安装、代码调用与多轮对话实现,解决“显存不足”“连接超时”等痛点,提供参数调优与结构化输出技巧,助力开发者在离线场景下快速构建稳定、高效的本地推理系统。

啤酒鸭的物联网开发记录博客 222

智叟云集-手机证据抓取系统的工程结构与应用入口

本文系统阐述手机证据抓取系统的工程结构与应用入口,涵盖四大层面:工程目录划分(Android、Python服务、Web页面、测试与构建工具);Android组件通过Manifest声明可启动页面,主界面由MainActivity管理;Python服务通过run.py解析参数并启动FastAPI应用,支持远程访问;浏览器页面采用HTML/CSS/JS分离架构,静态资源通过路径关联,实现动态交互。各模块分工明确,协同构建可运行的采集系统。

2301_77178996的博客 229

Java Arrays.asList 常见坑详解|UnsupportedOperationException、数组联动、基本类型 bug

解析 Arrays.asList 常见开发陷阱,演示 UnsupportedOperationException、底层数组引用共享、基本类型数组问题,区分 Arrays 内部 ArrayList 与 java.util.ArrayList,给出数组转 List 的各种场景正确代码。

weixin_42617033的博客 435
上一篇: LWN: Control-flow integrity in 5.13!
下一篇: LWN:对print()输出消息生成索引列表!
LinuxNews搬运工
博客等级 码龄7年 438粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值