我有以下课程:
class Quiz(BaseModel):
question: str
subject: str
choice: str = Query(choices=('eu', 'us', 'cn', 'ru'))
我可以像这样基于此类渲染表单
@api.post("/postdata")
def post_data(form_data: Quiz = Depends()):
return form_data
如何显示选择字段的下拉列表?
Option 1
使用文字值。Literal https://pydantic-docs.helpmanual.io/usage/types/#literal-typetype 是 Python 标准库自 Python 3.8 起的一个新功能(在 Python 3.8 之前,它需要打字扩展 https://pypi.org/project/typing-extensions/包)并受 Pydantic 支持。例子:
from fastapi import FastAPI, Depends
from pydantic import BaseModel
from typing import Literal
app = FastAPI()
class Quiz(BaseModel):
question: str
subject: str
choice: Literal['eu', 'us', 'cn', 'ru'] = 'us'
@app.post('/submit')
def post_data(data: Quiz = Depends()):
return data
Option 2
Use Enums https://pydantic-docs.helpmanual.io/usage/types/#enums-and-choices(另请参阅 Python 的enum https://docs.python.org/3/library/enum.html模块,以及 FastAPI 的文档预定义值 https://fastapi.tiangolo.com/tutorial/path-params/#predefined-values)。通过拥有你的Enum
子类继承自str
,API 文档将能够知道这些值必须是类型string
并且能够正确渲染。例子:
from fastapi import FastAPI, Depends
from pydantic import BaseModel
from enum import Enum
app = FastAPI()
class Country(str, Enum):
eu = 'eu'
us = 'us'
cn = 'cn'
ru = 'ru'
class Quiz(BaseModel):
question: str
subject: str
choice: Country = Country.us
@app.post('/submit')
def post_data(data: Quiz = Depends()):
return data
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)