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

wordpress分销平台seo网络培训

wordpress分销平台,seo网络培训,企业网站源码mba77cm,个人网站备案不通过FastAPI 路径参数详解:动态路径与数据校验的灵活实现 本文全面介绍了在 FastAPI 中使用路径参数的技巧和实现方式。路径参数允许 API 动态响应不同路径中的请求信息,结合 URL(Uniform Resource Locator)和 URI(Unifor…

FastAPI 路径参数详解:动态路径与数据校验的灵活实现

本文全面介绍了在 FastAPI 中使用路径参数的技巧和实现方式。路径参数允许 API 动态响应不同路径中的请求信息,结合 URL(Uniform Resource Locator)和 URI(Uniform Resource Identifier)进行资源定位和标识。URL 是指资源的完整访问路径,用于确定资源的具体位置,而 URI 则是更广义的概念,包含 URL,在 URL 的基础上提供对特定资源的唯一标识。文中通过类型声明实现了路径参数的数据转换与校验,确保路径中的参数符合预期格式。本文还展示了路径参数类型、数据校验、路径操作顺序和 Enum 类型的使用,提供了定义固定值路径参数的示例。此外,文章解释了如何声明包含文件路径的路径参数,并提供了具体的代码示例,是学习 FastAPI 路径参数与资源标识的实用指南。

文章目录

  • FastAPI 路径参数详解:动态路径与数据校验的灵活实现
      • 一 路径参数
        • 1 示例
        • 2 路径参数类型
        • 3 数据转换
        • 4 数据校验
      • 二 路径操作的顺序
      • 三 使用 `Enum` 类型预定义路径参数的值
        • 1 比较枚举元素
        • 2 获取枚举值
        • 3 返回枚举元素
      • 四 包含文件路径的路径参数
      • 五 完整代码示例
      • 六 源码地址

一 路径参数

在 FastAPI 中,路径参数通过在路径字符串中包含变量来定义。路径参数用于接收请求 URL 中的动态部分,使得 API 可以根据不同的路径值响应不同的内容。具体来说,路径参数在路径中通过花括号来标识,并在相应的函数参数中进行定义和使用。例如,在路径 /items/{item_id} 中,{item_id} 就是路径参数。

1 示例

以下是一个简单的示例代码:

from fastapi import FastAPIapp = FastAPI()@app.get("/items/{item_id}")
async def read_item(item_id):return {"item_id": item_id}

在这个例子中,路径参数 item_id 的值会被传递给路径操作函数的参数 item_id。可以运行代码文件 chapter02.py 来启动应用:

$ uvicorn chapter02:app --reload

访问自动生成的 API 文档 Swagger UI:http://127.0.0.1:8000/docs。通过访问 http://127.0.0.1:8000/items/foo,可以获得如下返回:

{"item_id": "foo"}
2 路径参数类型

在以下代码中,item_id 的类型声明为 int

from fastapi import FastAPIapp = FastAPI()@app.get("/items02/{item_id}")
async def read_item(item_id: int):return {"item_id": item_id}
3 数据转换

FastAPI 可以通过类型声明自动解析请求中的数据并进行数据转换。例如,路径 /items/3 中的字符串 3 会被自动转换为整数 3

4 数据校验

FastAPI 使用 Python 类型声明来实现数据校验。如果请求中的值与声明的类型不匹配,将返回错误信息。例如,对于 async def read_item(item_id: int),当请求路径为 /items/foo 时,返回的错误信息如下:

{"detail": [{"type": "int_parsing","loc": ["path","item_id"],"msg": "Input should be a valid integer, unable to parse string as an integer","input": "foo"}]
}

在 FastAPI 中,数据校验由 Pydantic 实现。

二 路径操作的顺序

路径操作按定义顺序依次运行。如果一个 URI 既与特定路径匹配,又与包含路径参数的路径匹配,应将特定路径的操作放在前面,包含路径参数的路径写在后面。例如:

from fastapi import FastAPIapp = 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/me 必须在 /users/{user_id} 之前声明,否则 /users/{user_id} 将匹配 /users/me,并将 me 作为 user_id 的值。

三 使用 Enum 类型预定义路径参数的值

可以使用 Python 的 Enum 类型来预定义路径参数的值。

from enum import Enum
from fastapi import FastAPIclass ModelName(str, Enum):alexnet = "alexnet"resnet = "resnet"lenet = "lenet"app = FastAPI()@app.get("/models/{model_name}")
async def get_model(model_name: ModelName):if model_name is ModelName.alexnet:return {"model_name": model_name, "message": "Deep Learning FTW!"}if model_name.value == "lenet":return {"model_name": model_name, "message": "LeCNN all the images"}return {"model_name": model_name, "message": "Have some residuals"}

使用 Enum 类(ModelName)可以为路径参数 model_name 设置类型注解。

1 比较枚举元素
if model_name is ModelName.alexnet:
2 获取枚举值
model_name.value

ModelName.lenet.value
3 返回枚举元素
return {"model_name": model_name, "message": "Have some residuals"}

请求访问 http://127.0.0.1:8000/models/resnet 时,客户端将收到如下 JSON 响应:

{"model_name": "resnet","message": "Have some residuals"
}

四 包含文件路径的路径参数

可以直接使用 Starlette 的选项声明包含路径路径参数

/files/{file_path:path}

在这个示例中,参数名为 file_path,结尾部分的 :path 表示该参数应匹配整个路径。例如,包含 /home/your/myfile.txt 的路径参数必须以斜杠(/)开头。在这个例子中,URI 为 /files//home/your/myfile.txtfileshome 之间需要使用双斜杠//)。

:OpenAPI 不支持声明包含路径的路径参数,因此访问 /files/{file_path} 时可能会报错 {"detail": "Not Found"}

五 完整代码示例

from fastapi import FastAPI
from enum import Enumapp = FastAPI()@app.get("/items/{item_id}")
async def read_item(item_id):return {"item_id": item_id}@app.get("/items02/{item_id}")
async def read_item(item_id: int):return {"item_id": item_id}@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}class ModelName(str, Enum):alexnet = "alexnet"resnet = "resnet"lenet = "lenet"@app.get("/models/{model_name}")
async def get_model(model_name: ModelName):if model_name is ModelName.alexnet:return {"model_name": model_name, "message": "Deep Learning FTW!"}if model_name.value == "lenet":return {"model_name": model_name, "message": "LeCNN all the images"}return {"model_name": model_name, "message": "Have some residuals"}@app.get("/files/{file_path:path}")
async def read_file(file_path: str):return {"file_path": file_path}

六 源码地址

详情见:GitHub FastApiProj

引用: FastAPI 文档

http://www.ds6.com.cn/news/3888.html

相关文章:

  • 网站开发 ssh 菜鸟深圳全网营销型网站
  • 盘古网做网站多少钱广州seo公司排行
  • ppt那个网站做的好班级优化大师怎么加入班级
  • 阜阳做网站有吗参考消息今天新闻
  • 建筑人才招聘网官网何鹏seo
  • 无锡网站建站公司搜索优化
  • 莱芜雪野湖图片苏州百度快照优化排名
  • 全国学校网站建设sq网站推广
  • 中国城乡与住房建设部网站贵阳网站建设制作
  • 上海网站开发设计培训手机网站百度关键词排名
  • 电商网站怎么做seo公司网站免费自建
  • 可信赖的昆明网站建设友联互换
  • 赣州网站建设价位网站关键词排名怎么优化
  • 外贸公司的网站建设爱网站查询挖掘工具
  • 网站域名绑定ip软文兼职10元一篇
  • 做ppt兼职的网站新闻10 30字
  • 建站公司做的网站侵权了网站制作
  • pycharm 做网站哪个好搜索引擎优化的作用是什么
  • 程序员做的简单的网站百度直播间
  • 网站打开是404错误代码技术短期培训班
  • 谈谈网站的开发流程谷歌推广效果好吗
  • 目前网站开发应用到的技术有什么黄山网站建设
  • wordpress侧边栏缩略图青岛seo网站管理
  • 哪家公司做跳转网站在线crm软件
  • 新闻网站前台页面培训心得体会模板
  • 自己怎么在电脑上做网站网站推广优化招聘
  • 郑州模板建站定制网站新闻头条最新消息摘抄
  • 论坛类网站怎么建设买外链有用吗
  • 审计网站建设毕业设计网络广告策划书范文
  • 网站变灰兼容代码青岛爱城市网app官方网站