當前位置:
首頁 > 知識 > Flask 插件學習系列:Restful

Flask 插件學習系列:Restful

看過入門系列的朋友們一定已經被 Flask 的簡潔之美感染到了吧。其實 Flask 不僅是一個 Python Web 框架,更是一個開源的生態圈。在基礎框架之外,Flask 擁有豐富的擴展(Extension) 來其擴充功能,這些擴展有的來自官方,有的來自第三方。這一系列會給大家介紹一些 Flask 常用的擴展及其使用方法。

Flask 擴展

你可以在 Flask 的官網上尋找你想要的擴展,每個擴展都有其文檔鏈接和 Github 上的源碼鏈接。擴展可以通過"pip install"來安裝。使用擴展也很簡單,一般就是通過 import 導入擴展包,然後就可以像普通 python 包一樣調用了。下一個部分我們就會拿 Flask 的 Restful 擴展來舉個例子。作為開發人員,你還可以自己開發 Flask 擴展。這篇中我們就不細述了。

Flask-RESTful 擴展

在 入門系列第二篇路由中,我們了解到 Flask 路由可以指定 HTTP 請求方法,並在請求函數中根據不同的請求方法,執行不同的邏輯。這樣實現一個 Restful 的請求已經相當簡單了(不熟悉 Restful?先去惡補下)。但是 Flask 還有更簡便的方法,就是其 Flask-RESTful 擴展。首先,我們來安裝這個擴展:

這個例子很容易理解,Restful 擴展通過"api.addresource()"方法來添加路由,方法的第一個參數是一個類名,該類繼承"Resource"基類,其成員函數定義了不同的 HTTP 請求方法的邏輯;第二個參數定義了 URL 路徑。運行上面的例子並訪問"http://localhost:5000/users",GET 請求時會列出全局變數"USERLIST"中的內容,POST 請求時會在"USER_LIST"中添加一項,並返回剛添加的項。如果在 POST 請求中找不到"name"欄位,則返回"400 Bad Request"錯誤。由於類"UserList"沒有定義"put"和"delete"函數,所以在 PUT 或 DELETE 請求時會返回"405 Method Not Allowed"錯誤。

另外,路由支持多路徑,比如:

這樣訪問"http://localhost:5000/userlist"和"http://localhost:5000/users"的效果完全一樣。

帶參數的請求

上面的例子請求是針對 user 列表的,如果我們要對某個具體的 user 做操作,就需要傳遞具體的"user_id"了。這時候,我們需要路由支持帶參數。Flask-RESTful 的實現同 Flask 一樣,就是在路由中加上參數變數即可。我們看下例子:

在"api.addresource()"的第二個參數路徑中加上 URL 參數變數即可,格式同 入門系列第二篇Flask 路由中完全一樣,也支持轉換器來轉換變數類型。此外,在 User 類的 GET,POST,PUT 等成員函數中,記得加上參數"userid"來獲取傳入的變數值。

參數解析

在 POST 或 PUT 請求中,直接訪問 form 表單並驗證的工作有些麻煩。Flask-RESTful 提供了"reqparse"庫來簡化。我們來改進下上例中的 PUT 函數:

你可以通過"parser.addargument()"方法來定義 form 表單欄位,並指定其類型(本例中是字元型 str)。然後在 PUT 函數中,就可以調用"parser.parseargs()"來獲取表單內容,並返回一個字典,該字典就包含了表單的內容。"parser.parseargs()"方法會自動驗證數據類型,並在類型不匹配時,返回 400 錯誤。你還可以添加"strict"參數,如"parser.parseargs(strict=True)",此時如果請求中出現未定義的參數,也會返回 400 錯誤。

示例代碼

結合上述的內容,我們來看一個完整的例子:

代碼就不解釋了,留給讀者一個作業,請結合 入門系列第六篇資料庫集成的例子,寫一個資料庫表 CRUD 的 Restful 應用吧。

本例中的代碼及資料庫集成的代碼可以在 這裡下載。

題圖:pexels,CC0 授權。

點擊展開全文

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 編程派 的精彩文章:

美女產品經理與技術宅的一次「約會」
一個全球最大成人網站的爬蟲
利用Tesseract圖片文字識別初探
雲伺服器彈性、安全、穩定背後的技術秘密
如何利用 Celery 執行定時任務並設置優先順序?

TAG:編程派 |

您可能感興趣

WordPress Simple Social Buttons插件安全漏洞
WordPress代碼高亮插件Pure-Highlightjs
WordPress怎麼生成sitemap.xml?插件XML Sitemap & Google News
WordPress插件YITH WooCommerce Wishlist SQL注入漏洞
新型惡意軟體Nigelthorn通過Facebook和Chrome插件傳播
Flow:實用的burp插件;Slingshot APT攻擊
bootstrap Fileinput插件的使用實例
Oculus Unity插件宣布新增Windows MR支持
WordPress登錄頁面美化插件:Login Designer
阻止Facebook跟蹤數據的Firefox開源插件Facebook Container
微軟的Unity插件Project Acoustics為VR提供雲端3D音頻
MultiScatter:3ds Max的插件|可與V-Ray和Mental Ray渲染系統配合使用!
AMD為macOS版Blender和Maya發布Radeon ProRender插件
WordPress Plugin AutoSuggest插件SQL注入復現與分析
唯美逆光ps插件,燈光工廠Knoll Light Factory Photo免費下載
星風PresenZ技術將以插件形式支持Autodesk 3ds Max
Oculus Unity插件現已支持Windows MR頭顯
被EDIUS官方「點名」的音頻插件:Restauration Suite
IDEA中安裝MongoDB插件-再也無要nosql manager for mongodb
【插件發布】InteracTool