FastAPI同路径带查询参数的第二个端点无法触发调用的问题
问题原因与解决方案
FastAPI的路由匹配仅依据路径URL和HTTP请求方法,查询参数不属于路由匹配的判断条件。你定义了两个路径均为/的GET端点,这会导致后定义的端点覆盖先定义的(或框架仅保留第一个,取决于版本),因此无论是否携带查询参数,只会触发其中一个端点。
要实现“不带参数返回提示、带参数返回用户信息”的需求,无需定义两个端点,只需将逻辑合并为一个,给查询参数设置默认值即可:
from fastapi import APIRouter router = APIRouter() @router.get('/') def index(uname: str = None, uemail: str = None): if uname is None or uemail is None: return 'Call like https://localhost:5000/?uname=xyz&uemail=abc@xyz.com' return f'User Name is : {uname} and User Email is: {uemail}'
如果需要更严谨的参数校验(比如明确标记为可选查询参数),可以使用Query类:
from fastapi import APIRouter, Query router = APIRouter() @router.get('/') def index(uname: str = Query(None, description="用户名"), uemail: str = Query(None, description="用户邮箱")): if not uname or not uemail: return 'Call like https://localhost:5000/?uname=xyz&uemail=abc@xyz.com' return f'User Name is : {uname} and User Email is: {uemail}'
这样,当请求不带uname或uemail参数时,会返回提示信息;当携带两个参数时,会返回用户信息。
内容的提问来源于stack exchange,提问作者user1951017
相关产品推荐
相关产品推荐

