<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          LWN:Pallets項目集的新版本!

          共 4085字,需瀏覽 9分鐘

           ·

          2021-06-11 17:09

          關注了就能看到更多這么棒的文章哦~

          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 項目發(fā)布了一個重要版本 Flask 2.0,但不僅如此。雖然 flask 可能過于光彩奪目吸引眼球了,但其實它是一批共同合作來為各種 web 開發(fā)提供解決方案的 library 中的一個。所有這些 library 在一起被稱為 Pallets project。這是第一次把 Pallets 包含的所有六個 library 同時發(fā)布出來,并且每個 library 都是新發(fā)布了一個主要版本。這次的新版本拋棄了對 Python 2 的支持,同時也吸收了許多新東西。

          Pallets

          Flask 相當有名,以前也在 LWN 介紹過,但 Pallets 這個項目卻有點不夠知名,至少對我來說以前并不了解。Jinja2 template engine(模板引擎),是一個 Flask 中使用了的 Pallets 組件,它也是相當知名的,但其他幾個 library 就不那么為人熟知了。唯一一個我還聽說過的 library 就是支持 Web Server Gateway Interface(WSGI)application 的 Werkzeug 庫,是用來連接 Flask 應用程序和 Web 服務器的。

          Pallets 上還有三個 library,但規(guī)模都比較小,也比較專業(yè)。其中的 MarkupSafe 提供了一個文本對象,可以針對 HTML 來轉義字符;ItsDangerous 則提供了用來在可信和不可信環(huán)境之間移動的數據進行加密簽名的 helper 功能;還有命令行界面創(chuàng)建工具包(Command Line Interface Creation Kit),名為 Click,用于 "用盡量少的代碼來組合起來創(chuàng)建漂亮的命令行界面"。統(tǒng)一協調后,正式版本發(fā)布是在 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 年底就已經宣布的計劃。"刪除兼容性代碼使得代碼執(zhí)行速度更快,同時也更容易維護和方便代碼貢獻者。" 另一個多個版本共同支持的功能是 type annotation,已經在這幾個 library 中都得到了支持。除此之外還利用各種工具在整個代碼庫上采用了一致的代碼風格。

          Changes

          Flask 支持了異步視圖(asynchronous views)和 error handler,所以可以用 async def 來定義函數,Flask 會起一個單獨的線程來運行此函數。目前還不完全清楚 Flask 針對 async 會增加多大程度的支持,因為 Quart 項目之前已經用 Flask API 提供了一個異步的 web framework。Quart 的開發(fā)者 Philip Jones 是 Pallets 的維護者之一,他在 2019 年寫了一篇關于這個主題的博文,并在 GitHub 上提交了一個申請在 Flask 中實現 async 的 issue。

          Blueprints 現在可以在 Flask 2.0 中嵌套使用了,這為管理各種 web application 提供了更多靈活性。開發(fā)模式下的服務程序(即通過 "flask run" 運行的)的 error handling 得到了改善,不會再推遲報出它啟動時檢測到的錯誤。"flask shell" 在 Flask 應用程序的上下文中提供了一個 Python 的 REPL 環(huán)境,現在如果啟用了 Readline 的話就可以按 Tab 鍵補全。

          Werkzeug 2.0 的幾項重點更新使其可以更靈活地支持 async。本地變量會用 ContextVar 類型來管理,這樣它們就可以在 coroutine 之間共享,而不僅僅是在線程之間共享了。Flask 的 Request 和 Response 這兩個 class 進行了重構,刪除了 BaseRequest/Response 這些父類,并將所有的混合工作移到這些(現在)基類中。此外,正在創(chuàng)建一個新的 API,從而可以從這些 class 中移除那些依賴于 WSGI 或 I/O 操作的代碼。"這將使我們能夠在未來更好地支持 sync 和 async 的使用場景"。具體來說,Quart 和其他異步服務器網關接口(ASGI)framework 也能使用 Werkzeug 了。

          此外,從 Werkzeug 返回的許多 datetime 對象現在都可以支持時區(qū)了。用來上傳文件的 multipart/form-data 的解析功能得到了顯著改善,性能提高了 15 倍。URL routing 現在可以支持 WebSocket 方案了(ws://和 wss://);這個 library 沒有直接支持 WebSocket,但這個功能就能允許 prect 使用 Werkzeug routing。

          Jinja 3.0 版本發(fā)布之后,不需要打 patch 就可以支持 async 環(huán)境和 render 了。此外,NativeEnvironment(允許模板產生本地 Python 類型,而不僅僅是字符串)也被修改了,可以支持 async 環(huán)境。模板中的 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 對象也增加時區(qū)的支持。

          MarkupSafe 2.0 為各種不同的 Python 版本、操作系統(tǒng)和體系架構增加了一系列的二進制支持,總共有 33 種組合。

          上面這些概述僅僅觸及了這些庫中引起我的關注的一些改動??梢宰屑毧匆幌鹿妫约胺浅T敿毜母氯罩?,會發(fā)現很多其他改進細節(jié)。

          History

          除了都是用來開發(fā) Web application 的好用工具之外,Pallets 項目們還有一個共同點:它們都是由 Armin Ronacher 發(fā)起的,他在 Python 社區(qū)中一直是一個多產的貢獻者。在他發(fā)表了一個愚人節(jié)笑話 并形成了 Flask 整整六年之后,他在一篇博文中介紹了 Pallets 項目:

          2010 年 4 月 1 日,我發(fā)布了一個名為 denied 的玩笑性 microframework,它嘲笑了當時所有的那些不管理依賴關系并且將所需一切都塞在一個 Python 文件中的 microframework。我當時所做的就是將 Jinja2 和 Werkzeug 以 base64 編碼的 zip 文件的形式塞到了 framework 中唯一的 Python 文件中。人們對它的反應很有趣,因為一方面,很多人并不真正理解這是一個愚人節(jié)的玩笑,另一方面,在另一個討論中,沒有一個微型框架真正使用 dependency 關系甚至鼓勵使用。

          一個月后,出現了一個名為 "Flask" 的新項目,它實際上就是認真實現了這個概念。它推出時的口號是 "基于 Werkzeug、Jinja 2 和良好意愿的 Python 微框架 ",六年后,它成為了 GitHub 上最受歡迎的 Python 框架。

          今天,Ronacher 仍然參與在 Pallets 之中,還有和他一起創(chuàng)辦 Pallets 的其他三個人,以及后來加入的更多人員,比如 Jones。這七個人自然得到了許多其他開發(fā)人員的支持。"參與人員的總名單要長得多,因為 Pallets 包含了多年來許多開發(fā)人員的無數貢獻。" 與幾乎所有的項目(或多個項目組合)一樣,如果讀者對某個 library 感興趣,Pallets 將會非常歡迎更多貢獻者加入進來。

          全文完
          LWN 文章遵循 CC BY-SA 4.0 許可協議。

          歡迎分享、轉載及基于現有協議再創(chuàng)作~

          長按下面二維碼關注,關注 LWN 深度文章以及開源社區(qū)的各種新近言論~



          瀏覽 47
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  操骚屄日逼97 | 双乳顶弄呻吟A片视频 | 91视频青青草 | 国产91精品国自产精品 | 亚洲日韩AV在线播放 |