一文搞定 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_iditem_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模型作为查询参数的使用。通过这些方法,可以灵活地处理和传递查询参数,实现更丰富的功能需求。

相关推荐
陈随易几秒前
前端大咖mizchi不满Rust、TypeScript却爱上MoonBit
前端·后端·程序员
冬奇Lab8 分钟前
一天一个开源项目(第45篇):OpenAI Agents SDK Python - 轻量级多 Agent 工作流框架,支持 100+ LLM 与实时语音
人工智能·开源·openai
小兵张健10 分钟前
两个配置让 Codex 效率翻倍
人工智能·程序员·github copilot
雨中飘荡的记忆1 小时前
Multi-Agent + Skills + Spring AI 构建自主决策智能体
后端·spring
kymjs张涛2 小时前
OpenClaw 学习小组:初识
android·linux·人工智能
yangpow22 小时前
拆解 OpenClaw 的 Skills 机制:一个为 AI Agent 设计的"包管理器"
人工智能
我叫黑大帅2 小时前
Go 语言并发编程的 “工具箱”
后端·面试·go
warm3snow2 小时前
AI 重塑产品管理工具:从 Jira 到智能体项目经理的终极演进
人工智能·ai·excel·项目管理·飞书·产品经理·jira·协同·tapd
吴佳浩2 小时前
OpenClaw macOS 完整安装与本地模型配置教程(实战版)
人工智能·macos·agent
用户8356290780513 小时前
Python 实现 PowerPoint 形状动画设置
后端·python