一文搞定 FastAPI 查询参数

你好,我是 shengjk1,多年大厂经验,努力构建 通俗易懂的、好玩的编程语言教程。 欢迎关注!你会有如下收益:

  1. 了解大厂经验
  2. 拥有和大厂相匹配的技术等

希望看什么,评论或者私信告诉我!

一、查询参数定义

路径操作函数中,不是路径参数的其他参数,就是查询参数。比如:

py 复制代码
from fastapi import FastAPI

app = FastAPI()

@app.get( "/items" )
def read_item(item_id:int,item_name:str):
    return { "item_id" : item_id,"item_name":item_name}
     
    
if __name__ == "__main__" :
    import uvicorn
    uvicorn.run( "quickstart.demo:app" ,reload=True ,port= 8001)

item_id,item_name 都不是路径参数,所以它就是查询参数。

二、查询参数作用

方便给 路径操作函数 传参

三、查询参数基本使用

3.1. URL拼接和必需参数

查询参数,一般是在 URL 的 ? 后,并以 & 分割,比如:

py 复制代码
from fastapi import FastAPI

app = FastAPI()

@app.get( "/items" )
def read_item(item_id:int,item_name:str):
    return { "item_id" : item_id,"item_name":item_name}
     
    
if __name__ == "__main__" :
    import uvicorn
    uvicorn.run( "quickstart.demo:app" ,reload=True ,port= 8001)

此时 item_id 和 item_name 都是必需的,URL必须传这两个参数。启动程序,然后在浏览器中访问 http://127.0.0.1:8001/items?item_id=1&item_name=xiaoming,响应为:

json 复制代码
{"item_id":1,"item_name":"xiaoming"}

3.2. 默认值

查询参数可以设置默认值,如:item_name 默认值为 xiaoming

py 复制代码
from fastapi import FastAPI

app = FastAPI()

@app.get( "/items" )
def read_item(item_id:int,item_name:str='xiaoming'):
    return { "item_id" : item_id,"item_name":item_name}
     
    
if __name__ == "__main__" :
    import uvicorn
    uvicorn.run( "quickstart.demo:app" ,reload=True ,port= 8001)

访问 http://127.0.0.1:8001/items?item_id=1&item_name=xiaoming 和访问 http://127.0.0.1:8001/items?item_id=1 他们的结果都是一样的。因为URL 中不设置 item_name 的值,它会用默认值来填充。

3.3. 可选参数

查询参数可以设置为可选参数,如 item_name=None 可选参数的意思:URL中可以不包含这个参数,属于可有可无

py 复制代码
from fastapi import FastAPI

app = FastAPI()

@app.get( "/items" )
def read_item(item_id:int,item_name:str=None):
    if item_name:
        return { "item_id" : item_id,"item_name":item_name}
    else:
        return { "item_id" : item_id}
     
    
if __name__ == "__main__" :
    import uvicorn
    uvicorn.run( "quickstart.demo:app" ,reload=True ,port= 8001)

访问 http://127.0.0.1:8001/items?item_id=1&item_name=xiaoming 响应为:

json 复制代码
{"item_id":1,"item_name":"xiaoming"}

和访问 http://127.0.0.1:8001/items?item_id=1 响应为:

json 复制代码
{"item_id":1}

3.4. Pydantic 模型( 请求体 )作为查询参数

py 复制代码
from fastapi import FastAPI
from pydantic import BaseModel

app = FastAPI()

class Item(BaseModel):
    name: str
    price: float
    
@app.put( "/items/{item_id}" )
def  put_item(item_id:int,item:Item):
    return { "item_id" : item_id, "item" :item}

if __name__ == "__main__" :
    import uvicorn
    uvicorn.run( "quickstart.demo:app" , reload=True, port=8001)

Client端:

py 复制代码
import requests

data={ "name" : "flow" , "price" :2.3}

respone=requests.put( "http://127.0.0.1:8001/items/1" ,json=data)
print(respone.json())

respone的结果:

json 复制代码
{'item_id': 1, 'item': {'name': 'flow', 'price': 2.3}}

三、总结

本文详细介绍了查询参数在FastAPI中的基本使用方法,包括URL拼接和必需参数、默认值、可选参数和Pydantic模型作为查询参数的使用。通过这些方法,可以灵活地处理和传递查询参数,实现更丰富的功能需求。

相关推荐
IT研究室2 分钟前
最新大数据毕业设计选题推荐-基于大数据的AI助手系统性软件缺陷评论挖掘与可视化-大数据-Spark-Hadoop-Bigdata
大数据·人工智能·课程设计
u1301306 分钟前
GitHub 热榜项目:日榜(2026-10-30)
人工智能·github
超级架构师10 分钟前
让 Fortran 模型自己调用 Agent:原生 Fortran 2008 实现深度剖析
人工智能·python·架构·机器人·开源·fortran
Best_Liu~10 分钟前
SpringBoot全局日期格式化
java·spring boot·后端
小蒜学长14 分钟前
基于Django+Vue喵汪联盟宠物领养系统的设计与实现(代码+数据库+LW)
后端·python·django·宠物领养系统·流程规范化
fly-iot23 分钟前
【FDE知识库】(1):AI 编程时代开发语言选型分析,云使用go,企业用java,算法python,底层c
开发语言·人工智能·golang
云边有个稻草人23 分钟前
Prometheus Pushgateway教程:离线任务指标上报、Shell与Python示例、远程访问
开发语言·python·prometheus
郝学胜-神的一滴28 分钟前
游戏设计:原型与开发 17:数字化系统里的思维体操
人工智能·游戏·游戏程序·游戏策划·游戏设计
fanruitian37 分钟前
pycharm 使用anaconda
ide·python·pycharm
腾讯云大数据38 分钟前
腾讯云发布一站式多模态数据处理与模型训推方案,助力Physical AI释放生产力
大数据·人工智能·云计算·腾讯云