Flask RESTful 示例

目錄

    • 1. 環境準備
    • 2. 安裝依賴
    • 3. 修改main.py
    • 4. 運行應用
    • 5. API使用示例
      • 獲取所有任務
      • 獲取單個任務
      • 創建新任務
      • 更新任務
      • 刪除任務
    • 中文亂碼問題:

下面創建一個簡單的Flask RESTful API示例。首先,我們需要創建環境,安裝必要的依賴,然后修改main.py文件來實現一個基本的RESTful API。

1. 環境準備

uv init 
uv venv
source .venv/bin/activate

2. 安裝依賴

uv pip install flask flask-restful

3. 修改main.py

現在,讓我們修改main.py文件,創建一個簡單的RESTful API:

from flask import Flask, request
from flask_restful import Resource, Api, reqparseapp = Flask(__name__)
api = Api(app)# 內存中的任務列表
tasks = {1: {"task": "學習Flask", "done": False},2: {"task": "學習RESTful API", "done": False},3: {"task": "構建項目", "done": False}
}# 任務計數器
task_id_counter = 3# 創建請求解析器
task_parser = reqparse.RequestParser()
task_parser.add_argument('task', type=str, required=True, help='任務內容不能為空')
task_parser.add_argument('done', type=bool, default=False)# 處理單個任務的資源
class Task(Resource):def get(self, task_id):if task_id not in tasks:return {"error": "任務不存在"}, 404return tasks[task_id]def delete(self, task_id):if task_id not in tasks:return {"error": "任務不存在"}, 404del tasks[task_id]return {"message": f"任務 {task_id} 已刪除"}, 200def put(self, task_id):if task_id not in tasks:return {"error": "任務不存在"}, 404args = task_parser.parse_args()tasks[task_id] = {"task": args["task"], "done": args["done"]}return tasks[task_id], 200# 處理任務列表的資源
class TaskList(Resource):def get(self):return tasksdef post(self):global task_id_counterargs = task_parser.parse_args()task_id_counter += 1task_id = task_id_countertasks[task_id] = {"task": args["task"], "done": args["done"]}return tasks[task_id], 201# 注冊API路由
api.add_resource(TaskList, '/tasks')
api.add_resource(Task, '/tasks/<int:task_id>')# 主函數
def main():print("啟動Flask RESTful API服務器...")app.run(debug=True)if __name__ == "__main__":main()

4. 運行應用

現在您可以運行應用:

uv run main.py

在這里插入圖片描述

5. API使用示例

獲取所有任務

curl http://127.0.0.1:5000/tasks

在這里插入圖片描述

獲取單個任務

curl http://127.0.0.1:5000/tasks/1

在這里插入圖片描述

創建新任務

curl -X POST http://127.0.0.1:5000/tasks -H "Content-Type: application/json" -d "{\"task\": \"新任務\", \"done\": false}"

在這里插入圖片描述

更新任務

curl -X PUT http://127.0.0.1:5000/tasks/1 -H "Content-Type: application/json" -d "{\"task\": \"更新的任務\", \"done\": true}"

在這里插入圖片描述

刪除任務

curl -X DELETE http://127.0.0.1:5000/tasks/1

在這里插入圖片描述

在這里插入圖片描述

中文亂碼問題:

將原文件中的flask_restful\representations\json.py

from __future__ import absolute_import
from flask import make_response, current_app
from flask_restful.utils import PY3
from json import dumpsdef output_json(data, code, headers=None):"""Makes a Flask response with a JSON encoded body"""settings = current_app.config.get('RESTFUL_JSON', {})# If we're in debug mode, and the indent is not set, we set it to a# reasonable value here.  Note that this won't override any existing value# that was set.  We also set the "sort_keys" value.if current_app.debug:settings.setdefault('indent', 4)settings.setdefault('sort_keys', not PY3)# always end the json dumps with a new line# see https://github.com/mitsuhiko/flask/pull/1262dumped = dumps(data, **settings) + "\n"resp = make_response(dumped, code)resp.headers.extend(headers or {})return resp

改為

from __future__ import absolute_import
from flask import make_response, current_app
from flask_restful.utils import PY3
import jsondef output_json(data, code, headers=None):"""Makes a Flask response with a JSON encoded body"""settings = current_app.config.get('RESTFUL_JSON', {})# 確保不使用ASCII編碼中文字符settings.setdefault('ensure_ascii', False)# 如果在調試模式下,設置縮進和排序鍵if current_app.debug:settings.setdefault('indent', 4)settings.setdefault('sort_keys', True)# 總是以換行符結束JSON輸出# 參見 https://github.com/mitsuhiko/flask/pull/1262dumped = json.dumps(data, **settings) + "\n"resp = make_response(dumped, code)resp.headers.extend(headers or {})# 明確設置內容類型為JSON,并指定UTF-8編碼resp.headers['Content-Type'] = 'application/json; charset=utf-8'return resp

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/84441.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/84441.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/84441.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

filebeat原理架構

Filebeat 是基于 Golang 開發的輕量級日志采集 Agent&#xff0c;其核心架構設計圍繞高效、可靠地采集與轉發日志數據&#xff0c;主要組件和工作流程如下&#xff1a; ?一、核心架構組件? ?輸入 (Inputs)? 負責監控指定的日志源&#xff08;如文件路徑、日志文件&#x…

Air8000開發板新資料開放!多功能+高擴展特性全面解鎖

Air8000開發板最新技術資料正式向開發者開放。這個開發板集多功能與高擴展性于一身&#xff0c;將為物聯網、嵌入式系統等領域的創新項目提供更強大的技術支持&#xff0c;助力開發者快速實現創意落地。 工程師朋友們&#xff0c;Air8000開發板“多功能集成高擴展性”&#xff…

如何遷移Cordova應用到HarmonyOS 5 以及遷移時常見的問題?

以下是 Cordova 應用遷移至 HarmonyOS 5 的完整方案及常見問題解決方案&#xff0c;結合最新技術實踐整理&#xff1a; 一、遷移流程 1. ?方案選擇? ?方案??適用場景??操作復雜度??Android 兼容層方案?簡單應用快速上線低&#xff08;無需修改代碼&#xff09;?原…

板凳-------Mysql cookbook學習 (十--4)

6.3 設置客戶端時區 --客戶端位于不同時區需要注意&#xff0c;如果位于同一時區則不需要關心 mysql> drop table if exists t; Query OK, 0 rows affected (0.06 sec)mysql> create table t (ts timestamp); Query OK, 0 rows affected (0.05 sec)mysql> insert int…

如何根據excel表生成sql的insert腳本

根據excel自帶的vba宏進行操作 首先altF11 點擊插入~模塊 錄取執行語句 Sub GenerateSQL()Dim lastRow As IntegerlastRow Cells(Rows.Count, 1).End(xlUp).RowFor i 2 To lastRow 假設第一行是標題Cells(i, "S").Value "INSERT INTO table_name (ID, RE…

React hook之useRef

React useRef 詳解 useRef 是 React 提供的一個 Hook&#xff0c;用于在函數組件中創建可變的引用對象。它在 React 開發中有多種重要用途&#xff0c;下面我將全面詳細地介紹它的特性和用法。 基本概念 1. 創建 ref const refContainer useRef(initialValue);initialValu…

開疆智能ModbusTCP轉Canopen網關連接AB PLC與臺達伺服通訊案例

本案例是羅克韋爾PLC通過開疆智能ModbusTCP轉Canopen網關連接臺達A2伺服的配置案例。 配置方法&#xff1a; 首先打開PLC配置軟件“Studio5000”并新建項目導入通訊文件 對功能塊進行設置 填寫本地IP地址以及服務區IP地址以及寄存器 填寫寄存器地址數量及使能 確認無誤后將配置…

用 LoRA 對 Qwen2.5-VL 模型進行SFT - LoRA微調流程

用 LoRA 對 Qwen2.5-VL 模型進行SFT - LoRA微調流程 flyfish ┌──────────────────────────────────────────────────────────────────────────┐ │ 環境準備與啟動 …

熵最小化Entropy Minimization (二): 案例實施

前面介紹了熵最小化、常用的權重函數匯總、半監督學習&#xff1a;低密度分離假設 (Low-Density Separation Assumption)、標簽平滑、信息最大化等相關的知識點&#xff0c;本文采用一個MNIST10分類的數據集來進一步體會它們的效果。 案例實施 對比方法 純監督學習方法&…

聯邦學習聚合參數操作詳解

聯邦學習中常見的模型聚合操作&#xff0c;具體用于對來自多個客戶端的模型更新進行聚合&#xff0c;以得到全局模型。在聯邦學習框架下&#xff0c;多個客戶端在本地訓練各自的模型后&#xff0c;會將模型更新&#xff08;通常是模型的權重&#xff09;發送到中央服務器&#…

藍牙 BLE 掃描面試題大全(2):進階面試題與實戰演練

前文覆蓋了 BLE 掃描的基礎概念與經典問題藍牙 BLE 掃描面試題大全(1)&#xff1a;從基礎到實戰的深度解析-CSDN博客&#xff0c;但實際面試中&#xff0c;企業更關注候選人對復雜場景的應對能力&#xff08;如多設備并發掃描、低功耗與高發現率的平衡&#xff09;和前沿技術的…

基于Flask實現的醫療保險欺詐識別監測模型

基于Flask實現的醫療保險欺詐識別監測模型 項目截圖 項目簡介 社會醫療保險是國家通過立法形式強制實施&#xff0c;由雇主和個人按一定比例繳納保險費&#xff0c;建立社會醫療保險基金&#xff0c;支付雇員醫療費用的一種醫療保險制度&#xff0c; 它是促進社會文明和進步的…

機房斷電后 etcd 啟動失敗的排查與快速恢復實錄

目錄 機房斷電后 etcd 啟動失敗的排查與快速恢復實錄 背景與問題起因 報錯分析 解決方案&#xff1a;刪除 member 數據重新初始化 步驟 1&#xff1a;停止 etcd 容器或服務 步驟 2&#xff1a;刪除 member 目錄 步驟 3&#xff1a;重啟 etcd 服務 附加提醒 總結與后續…

Linux上并行打包壓縮工具

文章目錄 Linux上并行打包壓縮工具1. **Pigz (Parallel gzip)**2. **Pbzip2 (Parallel bzip2)**3. **Pixz (Parallel xz)**4. **Zstd (支持多線程)**5. **GNU Parallel 傳統工具**6. **Fastest Tools (綜合建議)**注意事項&#xff1a; tar和zstd多線程壓縮和解壓**1. 多線程壓…

【K8S系列】K8S中Service 無法訪問問題的深度分析

摘要 &#xff1a; 本文是關于 Kubernetes 中 Service 無法訪問問題的深度分析&#xff0c;結合根本原因、診斷策略與解決方案的系統性指南&#xff1a; Kubernetes Service 訪問故障全景解析&#xff1a;從底層機制到實戰修復 Service 作為 Kubernetes 集群內網絡通信的核心抽…

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解題思路2. 代碼實現 題目鏈接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解題思路 這一題其實就是一個腦筋急轉彎&#xff0c;要想要能夠將所有的電腦解鎖&#x…

進行性核上性麻痹護理指南:全維度守護健康

進行性核上性麻痹是一種罕見的神經系統退行性疾病&#xff0c;會導致患者出現運動障礙、吞咽困難、認知障礙等癥狀。科學的健康護理對延緩病情發展、提升患者生活質量至關重要。 飲食護理&#xff1a;由于患者常存在吞咽困難&#xff0c;食物應選擇糊狀、軟爛的類型&#xff0c…

【淺析賽題,國賽一等獎水平:思路+模型:】2025 年第八屆河北省研究生數學建模競賽:A 題 基于圖論的復雜網絡分析與可視化建模

問題一&#xff1a;社交網絡拓撲結構分析與影響力評估 基礎模型 有向加權圖構建&#xff1a;將用戶設為節點&#xff0c;互動關系為有向邊&#xff0c;以互動頻率&#xff08;如一定時間內點贊、評論、轉發次數&#xff09;或加權求和&#xff08;賦予不同互動類型不同權重&a…

web3-去中心化金融深度剖析:DEX、AMM及兌換交易傳播如何改變世界

web3-去中心化金融深度剖析&#xff1a;DEX、AMM及兌換交易傳播如何改變世界 金融問題 1.個人投資&#xff1a;在不同的時間和可能的情況&#xff08;狀態&#xff09;下積累財富 2.商業投資&#xff1a;為企業家和企業提供投資生產性活動的資源 目標&#xff1a;跨越時間和…

【筆記】NVIDIA AI Workbench 安裝記錄

前言 NVIDIA AI Workbench 簡介 NVIDIA AI Workbench 是一款由 NVIDIA 推出的集成化開發工具&#xff0c;旨在簡化人工智能和機器學習的開發流程。它提供從數據準備到模型訓練、優化及部署的全套工具鏈&#xff0c;支持跨平臺協作&#xff0c;適合開發者、數據科學家和企業團隊…