当前位置: 首页 > news >正文

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

相关文章:

  • 使用obsutil工具在OBS上完成基本的数据存取【玩转华为云】
  • 【WiFi帧结构】
  • github.com 链接127.0.0.1
  • 弯曲问题的几个注解
  • 参数量计算举例
  • 大数据学习(136)-数据埋点
  • Chapter03-Authentication vulnerabilities
  • 期末考试复习总结-第一章《HarmonyOS介绍》
  • 【PX4飞控】右手坐标系与右手系旋转正方向的定义与判断方法
  • SQL SERVER 数据库迁移的三种方法!
  • Text GRAD使用场景的案例分析
  • 光影魔术手 4.7.1 | 经典照片美化软件
  • 【大模型01---Flash Attention】
  • 【数字图像处理】基于Python语言的玉米小斑病图像分析
  • java容易被忽略的事情
  • API网关是什么?原理、功能与架构应用全解析
  • 凤凰双展翅之七七一五八九五隔位六二五
  • 创建多个 OkHttpClient 实例 场景
  • stm32驱动ULN2003控制28BYJ48步进电机原理及代码(通俗易懂)
  • 10:00开始面试,10:06就出来了,问的问题有点变态。。。
  • 上海建设和交通委网站/上海seo推广服务
  • 绍兴柯桥区城乡建设局网站/lol今日赛事直播
  • 手机网站怎么做单页面/外链生成工具
  • 网站浏览记录怎么做/上海免费关键词排名优化
  • 网站充值怎么做分录/软文代写接单平台
  • 免费psd模板网站/关键词排名优化公司外包