前面聊了主要聊了一些简介和一些例子,今天主要是聊路径参数
、查询参数
等操作。
文章中肯定是避免不了官方文档的东西,但都会进行实操,也会列出踩坑点,希望对您有所帮助。
话不多少,进入代码的世界…
路径参数
路 径 参 数
fastapi
中添加路径可使用与 Python 格式化字符串相同的语法来声明路径"参数"或"变量":
from fastapi import FastAPI
@app.get("/items/{item_id}")
async def read_item(item_id):
"""
路径参数
:param item_id:
:return:
"""
return {"item_id": item_id}
路径参数 item_id
的值将作为参数 item_id
传递给你的函数。
当你启动后去请求该接口时http://127.0.0.1:8000/items/Beijing
,显示结果如下:
{"item_id":"Beijing"}
这里的Beijing
是随意输入的值,你想输入什么值就返回什么样的值。
但是,如果你对这个路径参数设置了指定类型,那就另一番风景了:
from fastapi import FastAPI
app = FastAPI()
@app.get("/items/{item_id}")
async def read_item(item_id: int):
"""
指定类型
:param item_id:
:return:
"""
return {"item_id": item_id}
这里指定了路径参数的类型,请求接口http://127.0.0.1:8000/items/Beijing
,显示结果如下:
{
"detail": [{
"loc": ["path", "item_id"],
"msg": "value is not a valid integer",
"type": "type_error.integer"
}]
}
从运行结果可以清晰看到,提示信息"type": "type_error.integer"
,这是因为路径参数指定的类型为整型,但传的参数是字符串,不符合规定的类型要求,Pydantic
在幕后检测到不符合规定类型,就抛出了类型错误。
现在传规定参数,去请求接口http://127.0.0.1:8000/items/100
,显示结果如下:
{"item_id":100}
预 设 值
如果你有一个接收路径参数的路径操作,但你希望预先设定可能的有效参数值,则可以使用标准的 Python Enum
类型。
Enum
就是枚举,枚举表示的是常量,因此,官方也建议枚举成员名称使用大写字母,枚举自身也是可迭代的
创建一个 Enum
- 首先导入
Enum
并创建一个继承自str
和Enum
的子类。 - 通过从
str
继承,API
文档将能够知道这些值必须为string
类型并且能够正确地展示出来。