IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> FastAPI学习-2.url 上的路径参数 -> 正文阅读

[Python知识库]FastAPI学习-2.url 上的路径参数

前言

在开发restful接口的时候,会遇到接口路径带参数的情况,比如

  • 查询单个 book 接口:get /api/v1/book/{id}
  • 修改单个 book 接口:put /api/v1/book/{id}
  • 删除单个 book 接口: delete /api/v1/book/{id}

这里路径里面的 {id} 就是路径参数

简单示例

可以使用与 Python 格式化字符串相同的语法来声明路径"参数"或"变量

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id):
    return {"item_id": item_id}

路径参数 item_id 的值将作为参数 item_id 传递给你的函数。

启动服务后,在浏览器输入http://localhost:8000/items/11 ,会看到返回 {“item_id”:“11”}

如果你运行示例并访问 http://127.0.0.1:8000/items/foo,将会看到如下响应:{“item_id”:“foo”}

有类型的路径参数

如果我们想让路径参数 item_id 只能传 数字类型,于是可以使用标准的 Python 类型标注为函数中的路径参数声明类型。

from fastapi import FastAPI

app = FastAPI()


@app.get("/items/{item_id}")
async def read_item(item_id: int):
    return {"item_id": item_id}

在这个例子中,item_id 被声明为 int 类型。

运行示例并打开浏览器访问 http://127.0.0.1:8000/items/3,将得到如下响应:

{"item_id":3}

注意函数接收(并返回)的值为 3,是一个 Python int 值,而不是字符串 “3”。

数据校验

但如果你通过浏览器访问 http://127.0.0.1:8000/items/foo,你会看到一个清晰可读的 HTTP 错误:

{
    "detail": [
        {
            "loc": [
                "path",
                "item_id"
            ],
            "msg": "value is not a valid integer",
            "type": "type_error.integer"
        }
    ]
}

因为路径参数 item_id 传入的值为 “foo”,它不是一个 int。
如果你提供的是 float 而非整数也会出现同样的错误,比如: http://127.0.0.1:8000/items/4.2
所以,通过同样的 Python 类型声明,FastAPI 提供了数据校验功能。所有的数据校验都由 Pydantic 在幕后完成,所以你可以从它所有的优点中受益。

docs文档

打开浏览器访问 http://127.0.0.1:8000/docs,你将看到自动生成的交互式 API 文档:

顺序很重要

在创建路径操作时,你会发现有些情况下路径是固定的。
比如 /users/me,我们假设它用来获取关于当前用户的数据.
然后,你还可以使用路径 /users/{user_id} 来通过用户 ID 获取关于特定用户的数据。
由于路径操作是按顺序依次运行的,你需要确保路径 /users/me 声明在路径 /users/{user_id}之前:

from fastapi import FastAPI

app = FastAPI()


@app.get("/users/me")
async def read_user_me():
    return {"user_id": "the current user"}


@app.get("/users/{user_id}")
async def read_user(user_id: str):
    return {"user_id": user_id}

否则,/users/{user_id} 的路径还将与 /users/me 相匹配,"认为"自己正在接收一个值为 “me” 的 user_id 参数。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:27:16  更:2022-03-10 22:30:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 21:43:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码