有什么方法可以将 FastAPI 处理程序的输入参数限制为几个指定的选项吗?

Ada*_*mer 3 python-asyncio fastapi

我想知道是否有某种方法可以让我轻松处理输入参数并将它们限制为 FASTAPI 中的多个值。

例如,如果我在这里有一个 hello-world 处理程序:

from fastapi import FastAPI

app = FastAPI()

@app.get(/)
async def root(name:str):
    return {"user_name_is": name}
Run Code Online (Sandbox Code Playgroud)

而我想要实现的是,让用户只能输入以下名称之一作为参数 [ Bob, Jack] ,其他名称都是非法的。

编写一些进一步的检查代码即可达到预期结果并不复杂:

from fastapi import FastAPI

app = FastAPI()

@app.get(/)
async def root(name:str):
    if name in ['Bob' , 'Jack']:
         return {"user_name_is": name}
    else:
         raise HTTPException(status_code=403)
Run Code Online (Sandbox Code Playgroud)

然而,编写代码仍然不够容易,尤其是当需要处理大量输入参数时。我想知道是否有一种方法可以使用类型提示和 pydantic 来达到相同的结果?

在文档中没有找到太多信息,需要帮助,谢谢。

=======

顺便说一句,如果我也有机会需要获取输入参数列表,有什么方法可以检查它们,就像下面的代码一样?

from fastapi import FastAPI
from typing import List

app = FastAPI()

@app.get(/)
async def root(names:List[str]):
    for name in names:
        if name not in ['Bob','Jack']:
            raise ...
    # else ,check passed
    return {"user_name_is": name}
Run Code Online (Sandbox Code Playgroud)

Dje*_*eth 11

我知道这个问题已经有一个答案被接受,但我觉得最干净的方法是使用Literal这样的打字:

from fastapi import FastAPI
from typing import Literal

app = FastAPI()

@app.get("/{name}")
async def root(name: Literal["Bob", "Jack"]):
    return {"user_name_is": name}
Run Code Online (Sandbox Code Playgroud)