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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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;适合开发者、数据科学家和企业团队…