搜尋
首頁後端開發Python教學Python Flask RESTful怎麼使用

Python Flask RESTful怎麼使用

Apr 29, 2023 pm 07:49 PM
pythonrestfulflask

一、RESTful 概述

REST(Representational State Transfer)風格是一種資源導向的Web 應用程式設計風格,它遵循一些設計原則,使得Web 應用程式具有良好的可讀性、可擴充性和可維護性。下面我們來詳細解釋一下RESTful 風格的各個方面:

  • 資源標識符:在RESTful 風格中,每個資源都有一個唯一的標識符,通常是一個 URL(Uniform Resource Locator)。 URL 用於標識資源的位置,使得用戶端可以使用 HTTP 協定進行存取。例如,一個簡單的URL 可以是:http://example.com/products/123,其中「products」表示資源類型,「123」表示資源標識符。

  • 表示層:資源可以以不同的格式表示,例如 JSONXML#,HTML  等。客戶端可以根據需要選擇適當的表示形式進行互動。例如,一個 RESTful API 可以傳回 JSON 格式的數據,以便用戶端可以更輕鬆地解析和處理資料。

  • 自描述訊息:每個訊息都應該包含足夠的信息,以描述如何處理該訊息。例如,HTTP 回應應該包含狀態碼、回應頭和回應正文等訊息,以便客戶端可以理解回應的含義。

  • 無狀態通信RESTful 風格的設計強調無狀態通信,這意味著每個請求都應該包含所有必要的信息以處理該請求,而不依賴先前的請求。這可以使得 Web 應用程式更加簡單和可擴展,因為伺服器不需要保留任何狀態資訊。

  • 統一介面:所有資源應該透過相同的介面來存取。這表示客戶端可以使用相同的HTTP 方法(如 GETPOSTPUTDELETE 等)來操作不同類型的資源。這使得 API 更加簡單和一致,並且更容易被其他開發者理解和使用。

總之,RESTful 風格的設計使得 Web 應用程式更加靈活、可擴展且易於維護,是一種現代化的 Web 應用程式設計方式。

二、Python 中的 RESTful

Python 可以用於實作 RESTful 風格的 Web 應用程序,通常使用一些 Web 框架來簡化開發流程。以下是一些常見的Python Web 框架:

  • FlaskFlask 是一個簡單、輕量級的Web 框架,可以用來建立RESTful 風格的Web 應用程式。它使用 Python 的裝飾器語法來定義 HTTP 路由,使得編寫 Web 應用程式變得簡單且直觀。 Flask 還提供了擴展機制,讓開發人員可以輕鬆地添加新的功能,例如資料庫存取、表單驗證等。

  • DjangoDjango# 是一個強大、全面的 Web 框架,可用於建立複雜的 Web 應用程式。它提供了許多內建功能,例如 ORM(物件關聯映射)、表單驗證、身份驗證等,可以使開發人員更快地建立 Web 應用程式。 Django 也支援 RESTful 風格的 Web 應用程式開發,可使用第三方函式庫 Django REST framework 來實現。

  • BottleBottle 是一個輕量級的Web 框架,它使用Python 的裝飾語法來定義HTTP 路由,可以快速建立RESTful 風格的Web 應用程式。 Bottle 還包含了一些有用的功能,例如模板引擎、資料庫存取、靜態文件處理等。

  • PyramidPyramid 是一個靈活、高度可自訂的Web 框架,可用於建立各種類型的Web 應用程序,包括RESTful 風格的Web 應用程式。 Pyramid 提供了許多擴充機制,讓開發人員可以輕鬆地添加新的功能,例如資料庫存取、表單驗證、身份驗證等。

以上框架都支援 RESTful 風格的 Web 應用程式開發,並且都具有各自的優缺點,開發人員可以根據自己的需求選擇合適的框架。

三、Flask RESTful API 範例講解

1)Flask-RESTful 庫講解

Flask-RESTful 是一個基於Flask 的擴充庫,它提供了一些方便的工具來建立RESTful API。以下是 Flask-RESTful 的一些主要特點和功能:

  • 資源類別:Flask-RESTful 提供了一個 Resource 基底類,可以用來建立資源。 Resource 類別包含了HTTP 方法(GETPOSTPUTDELETE 等)的處理邏輯,並提供了一些方便的方法來處理請求和回應。

  • 請求參數解析:Flask-RESTful 提供了一個 RequestParser 類,用於解析請求參數。 RequestParser 可以自動將查詢參數、表單參數、JSON 參數等解析成 Python 類型,並提供了一些選項來指定參數的類型、預設值、必須存在等限制條件。

  • 回應格式化:Flask-RESTful 提供了一個 marshal_with() 裝飾器,用於格式化回應資料。 marshal_with() 裝飾器可以將 Python 物件轉換成指定的輸出格式(如 JSON、XML 等),並支援指定輸出欄位、欄位類型、巢狀欄位等功能。

  • 路由定義: Flask-RESTful 提供了一個 Api 類,用於定義路由和資源的對應關係。 Api 類別包含了 add_resource()方法,用於將資源類別和 URL 路由綁定。

  • 異常處理:Flask-RESTful 提供了一些異常類,用於處理 HTTP 請求和回應中的錯誤。 Flask-RESTful 的例外類別包括 abortHTTPException 等,可以方便地處理 HTTP 狀態碼錯誤訊息等。

綜上所述,Flask-RESTful 提供了一些方便的工具來簡化 RESTful API 的開發。使用 Flask-RESTful 可以快速地定義資源、解析請求參數、格式化回應資料、定義路由和處理異常等,從而提高開發效率並降低出錯的風險。

2)Flask-RESTful 庫安裝

要安裝 Flask-RESTful 庫,可以使用 pip 指令進行安裝。在終端機中執行以下命令:

pip3 install flask-restful

這將會從 PyPI 上下載 Flask-RESTful 函式庫,並安裝到本機的 Python 環境中。安裝完成後,就可以在程式碼中匯入 flask_restful 模組,使用 Flask-RESTful 提供的功能來建立 RESTful API。

3)RESTful 範例講解

下面是一個簡單的Flask RESTful API 範例,它實作了一個簡單的To-Do List 應用程式:

from flask import Flask, request
from flask_restful import Api, Resource, reqparse, fields, marshal_with
app = Flask(__name__)
api = Api(app)
todos = {}
todo_fields = {
    'id': fields.Integer,
    'task': fields.String,
    'status': fields.Boolean
}
class TodoList(Resource):
    @marshal_with(todo_fields)
    def get(self):
        return todos
    @marshal_with(todo_fields)
    def post(self):
        parser = reqparse.RequestParser()
        parser.add_argument('task', type=str, help='Task is required', required=True)
        args = parser.parse_args()
        todo_id = len(todos) + 1
        todo = {'task': args['task'], 'status': False}
        todos[todo_id] = todo
        return todo, 201
class TodoItem(Resource):
    @marshal_with(todo_fields)
    def get(self, todo_id):
        return todos[todo_id]
    def put(self, todo_id):
        parser = reqparse.RequestParser()
        parser.add_argument('task', type=str)
        parser.add_argument('status', type=bool)
        args = parser.parse_args()
        todo = todos[todo_id]
        if args['task']:
            todo['task'] = args['task']
        if args['status']:
            todo['status'] = args['status']
        return todo
    def delete(self, todo_id):
        del todos[todo_id]
        return '', 204
api.add_resource(TodoList, '/todos')
api.add_resource(TodoItem, &#39;/todos/<int:todo_id>&#39;)
if __name__ == &#39;__main__&#39;:
    app.run(debug=True)

#
# 配置环境变量
export FLASK_APP=restful-test.py
# 启动服务,公开访问需要加上--host=0.0.0.0
python -m flask run --host=0.0.0.0

此範例使用Flask 和Flask-RESTful 庫來實作To-Do List 應用程式的RESTful API。以下是一些重要的程式碼片段的解釋:

  • #定義資源:在範例中,有兩個資源:TodoList 和 TodoItemTodoList 用來處理所有的 To-Do 任務列表,TodoItem 用來處理單一任務。

  • 定義請求參數:在範例中,我們使用 Flask-RESTful 函式庫的 RequestParser 來解析請求參數。我們定義了 'task' 和 'status' 參數,並使用 add_argument() 方法來指定它們的型別和其他限制條件。

  • 定義回應格式:在範例中,我們使用 Flask-RESTful 函式庫的 marshal_with() 裝飾器來定義回應的格式。我們定義了一個名為 todo_fields 的字典,其中包含了 To-Do 任務的 idtask 和 #status 欄位。

  • 定義請求方法:在範例中,我們使用 Flask-RESTful 函式庫的 Resource 類別來定義請求方法。我們實作了 GETPOSTPUT 和 DELETE 方法,用於取得任務清單新增任務更新任務刪除任務

  • 新增路由:在範例中,我們使用 Flask-RESTful 庫的 Api 類別來新增路由。我們使用 add_resource() 方法來將 TodoList 和 TodoItem 類別與對應的 URL 路由綁定。

在執行該範例後,可以透過存取 URL 來使用 To-Do List 應用程式的 RESTful API。例如,要取得所有任務清單,可以使用下列網址:

# GET http://localhost:5000/todos
curl http://localhost:5000/todos

新增一個任務,可以使用下列網址:

# POST http://localhost:5000/todos
curl -XPOST http://localhost:5000/todos -d &#39;task=123&#39;
curl -XPOST http://localhost:5000/todos -d &#39;{"task":"456"}&#39;  --header "Content-Type: application/json"

若要取得單一任務,可以使用下列網址:

# GET http://localhost:5000/todos/1
curl http://localhost:5000/todos/1

更新任務,可以使用下列網址:

# PUT http://localhost:5000/todos/1
curl -XPUT http://localhost:5000/todos/1 -d &#39;{"task":"test"}&#39;  --header "Content-Type: application/json"
# 查看
curl http://localhost:5000/todos/1

刪除任務,可以使用以下網址:

# DELETE http://localhost:5000/todos/1
curl -XDELETE http://localhost:5000/todos/1

Python Flask RESTful怎麼使用

以上是Python Flask RESTful怎麼使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:亿速云。如有侵權,請聯絡admin@php.cn刪除
在Python陣列上可以執行哪些常見操作?在Python陣列上可以執行哪些常見操作?Apr 26, 2025 am 12:22 AM

Pythonarrayssupportvariousoperations:1)Slicingextractssubsets,2)Appending/Extendingaddselements,3)Insertingplaceselementsatspecificpositions,4)Removingdeleteselements,5)Sorting/Reversingchangesorder,and6)Listcomprehensionscreatenewlistsbasedonexistin

在哪些類型的應用程序中,Numpy數組常用?在哪些類型的應用程序中,Numpy數組常用?Apr 26, 2025 am 12:13 AM

NumPyarraysareessentialforapplicationsrequiringefficientnumericalcomputationsanddatamanipulation.Theyarecrucialindatascience,machinelearning,physics,engineering,andfinanceduetotheirabilitytohandlelarge-scaledataefficiently.Forexample,infinancialanaly

您什麼時候選擇在Python中的列表上使用數組?您什麼時候選擇在Python中的列表上使用數組?Apr 26, 2025 am 12:12 AM

useanArray.ArarayoveralistinpythonwhendeAlingwithHomoGeneData,performance-Caliticalcode,orinterfacingwithccode.1)同質性data:arraysSaveMemorywithTypedElements.2)績效code-performance-calitialcode-calliginal-clitical-clitical-calligation-Critical-Code:Arraysofferferbetterperbetterperperformanceformanceformancefornallancefornalumericalical.3)

所有列表操作是否由數組支持,反之亦然?為什麼或為什麼不呢?所有列表操作是否由數組支持,反之亦然?為什麼或為什麼不呢?Apr 26, 2025 am 12:05 AM

不,notalllistoperationsareSupportedByArrays,andviceversa.1)arraysdonotsupportdynamicoperationslikeappendorinsertwithoutresizing,wheremactsperformance.2)listssdonotguaranteeconecontanttanttanttanttanttanttanttanttanttimecomplecomecomplecomecomecomecomecomecomplecomectacccesslectaccesslecrectaccesslerikearraysodo。

您如何在python列表中訪問元素?您如何在python列表中訪問元素?Apr 26, 2025 am 12:03 AM

toAccesselementsInapythonlist,useIndIndexing,負索引,切片,口頭化。 1)indexingStartSat0.2)否定indexingAccessesessessessesfomtheend.3)slicingextractsportions.4)iterationerationUsistorationUsisturessoreTionsforloopsoreNumeratorseforeporloopsorenumerate.alwaysCheckListListListListlentePtotoVoidToavoIndexIndexIndexIndexIndexIndExerror。

Python的科學計算中如何使用陣列?Python的科學計算中如何使用陣列?Apr 25, 2025 am 12:28 AM

Arraysinpython,尤其是Vianumpy,ArecrucialInsCientificComputingfortheireftheireffertheireffertheirefferthe.1)Heasuedfornumerericalicerationalation,dataAnalysis和Machinelearning.2)Numpy'Simpy'Simpy'simplementIncressionSressirestrionsfasteroperoperoperationspasterationspasterationspasterationspasterationspasterationsthanpythonlists.3)inthanypythonlists.3)andAreseNableAblequick

您如何處理同一系統上的不同Python版本?您如何處理同一系統上的不同Python版本?Apr 25, 2025 am 12:24 AM

你可以通過使用pyenv、venv和Anaconda來管理不同的Python版本。 1)使用pyenv管理多個Python版本:安裝pyenv,設置全局和本地版本。 2)使用venv創建虛擬環境以隔離項目依賴。 3)使用Anaconda管理數據科學項目中的Python版本。 4)保留系統Python用於系統級任務。通過這些工具和策略,你可以有效地管理不同版本的Python,確保項目順利運行。

與標準Python陣列相比,使用Numpy數組的一些優點是什麼?與標準Python陣列相比,使用Numpy數組的一些優點是什麼?Apr 25, 2025 am 12:21 AM

numpyarrayshaveseveraladagesoverandastardandpythonarrays:1)基於基於duetoc的iMplation,2)2)他們的aremoremoremorymorymoremorymoremorymoremorymoremoremory,尤其是WithlargedAtasets和3)效率化,效率化,矢量化函數函數函數函數構成和穩定性構成和穩定性的操作,製造

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。