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

fastapi中的patch请求

目录

    • 示例
    • 测试
      • 使用 `curl` 访问:
      • 使用 `requests` 访问:
      • 预期返回:
    • 浏览器访问

示例

下面是一个使用 @app.patch("") 的 FastAPI 示例,该示例实现了一个简单的用户信息更新 API。我们使用 pydantic 定义数据模型,并使用 patch 方法部分更新用户信息。

from fastapi import FastAPI, HTTPException
from pydantic import BaseModel, Field
from typing import Optional

app = FastAPI()

# 模拟的用户数据
users_db = {
    1: {"name": "Alice", "age": 25, "email": "alice@example.com"},
    2: {"name": "Bob", "age": 30, "email": "bob@example.com"},
}

# 请求模型,所有字段都是可选的
class UserUpdate(BaseModel):
    name: Optional[str] = Field(None, title="用户名")
    age: Optional[int] = Field(None, title="年龄", ge=0)
    email: Optional[str] = Field(None, title="邮箱")

@app.patch("/users/{user_id}")
def update_user(user_id: int, user_update: UserUpdate):
    if user_id not in users_db:
        raise HTTPException(status_code=404, detail="User not found")
    
    # 更新用户信息
    existing_user = users_db[user_id]
    update_data = user_update.dict(exclude_unset=True)  # 仅获取传入的字段
    existing_user.update(update_data)
    
    return {"message": "User updated successfully", "user": existing_user}

这个示例:

  • 维护了一个 users_db 作为模拟数据库。
  • 使用 @app.patch("/users/{user_id}") 处理用户信息的部分更新。
  • 通过 exclude_unset=True 确保只更新请求体中提供的字段,而不会覆盖未提供的字段。

你可以运行它,并使用 PATCH 请求测试,例如:

{
  "name": "Charlie"
}

这将只更新用户的 name,而不会修改 ageemail

测试

你可以使用 curlhttpx 或者 requests 来访问 PATCH 端点。下面是一个示例:

使用 curl 访问:

curl -X PATCH "http://127.0.0.1:8000/users/1" \
     -H "Content-Type: application/json" \
     -d '{"name": "Charlie", "age": 28}'

这个请求会更新 id=1 的用户,将 name 改为 "Charlie",并将 age 改为 28


使用 requests 访问:

如果你在 Python 代码中调用,可以这样做:

import requests

url = "http://127.0.0.1:8000/users/1"
payload = {"name": "Charlie", "age": 28}
headers = {"Content-Type": "application/json"}

response = requests.patch(url, json=payload, headers=headers)

print(response.json())  # 输出更新后的用户信息

预期返回:

{
  "message": "User updated successfully",
  "user": {
    "name": "Charlie",
    "age": 28,
    "email": "alice@example.com"
  }
}

可以看到,nameage 被成功更新,而 email 仍然保持原值。

你可以修改 payload 只提供部分字段,例如 {"email": "charlie@example.com"},就只会更新 email,其他字段不会改变。

另外,你可以在浏览器中访问 FastAPI 的 Swagger UI 或 Redoc 来测试 PATCH 请求,但 不能直接在地址栏访问,因为浏览器的地址栏只能发送 GET 请求,而 PATCH 请求需要使用 API 测试工具或 JavaScript 代码。

浏览器访问

FastAPI 自带了交互式文档,你可以在浏览器中打开:

  • Swagger UI: http://127.0.0.1:8000/docs
  • Redoc: http://127.0.0.1:8000/redoc

步骤:

  1. 启动 FastAPI 服务器(运行 uvicorn)。
  2. 在浏览器打开 http://127.0.0.1:8000/docs
  3. 找到 PATCH /users/{user_id} 端点,点击 “Try it out”
  4. 输入 user_id,在 Request body 里填入 JSON,例如:
    {
      "name": "Charlie",
      "age": 28
    }
    
  5. 点击 “Execute” 发送请求,查看响应结果。

在这里插入图片描述

在这里插入图片描述

相关文章:

  • windows本地部署DeepSeek实践
  • 【cuda学习日记】5.1 共享内存
  • 快检查达梦库怎么了
  • 不要升级,Flutter Debug 在 iOS 18.4 beta 无法运行,提示 mprotect failed: Permission denied
  • 数据库之PostgreSQL详解
  • 中间件专栏之Redis篇——Redis的三大持久化方式及其优劣势对比
  • 堆与二叉树
  • LVGL -------矩阵3
  • 计算机毕业设计SpringBoot+Vue.js智慧图书管理系统(源码+文档+PPT+讲解)
  • 安全测试之五:SQL Server注入漏洞几个实例
  • J5打卡——pytorch实现DenseNet+SE-Net猴痘分类
  • Java 反射(Reflection)的原理和应用
  • FPGA开发,使用Deepseek V3还是R1(6):以滤波器为例
  • Python接口自动化中操作Excel文件的技术方法
  • 时态知识图谱补全推理任务评价指标
  • 利用python实现对.xls文件表头的修改
  • openwebUI访问vllm加载deepseek微调过的本地大模型
  • STaR(Self-Taught Reasoner)方法:让语言模型自学推理能力(代码实现)
  • 算法题(83):寄包柜
  • 【重构小程序】升级JDK1.8、SpringBoot2.x 到JDK17、Springboot 3.x(一)
  • 做网站广告送报纸广告/google浏览器官网下载
  • 网站建设 前后台目录结构/免费发布网站seo外链
  • 个人网站经营性备案/seo优化搜索推广
  • 班组安全建设 网站/优化最狠的手机优化软件
  • 做外卖骑手用哪个网站/百度首页登录入口
  • 澳门响应式网站建设/深度优化