问题引入
fastapi 接口中只有一个参数时候,为遵循json传参规则,则会转换为传递一个字符串。
若想保持一致,则在参数定义时候设置属性embed为True即可,默认为False。
查看Body函数的源码:
def Body( # noqa: N802
default: Any,
*,
embed: bool = False,
media_type: str = "application/json",
alias: Optional[str] = None,
title: Optional[str] = None,
description: Optional[str] = None,
gt: Optional[float] = None,
ge: Optional[float] = None,
lt: Optional[float] = None,
le: Optional[float] = None,
min_length: Optional[int] = None,
max_length: Optional[int] = None,
regex: Optional[str] = None,
**extra: Any,
) -> Any:
Q:
尝试解释下embed参数的作用:
A:
embed参数是一个布尔值,用于指示是否嵌入(embed)请求体参数。当embed为True时,请求体参数会被嵌入到API文档中,而不是以引用的方式显示。这样可以直接在API文档中查看请求体参数的详细信息,包括参数的类型、描述、默认值等。当embed为False时,默认情况下不会嵌入请求体参数,而是以引用的方式显示。
扩展
继续分析func Body()中每个参数的作用:
default参数是一个Any类型的参数,表示参数的默认取值。当请求中没有提供该参数时,会采用默认值。
embed参数是一个bool类型的参数,用于指示是否嵌入请求体参数。当embed为True时,请求体参数会被嵌入到API文档中,而不是以引用的方式显示。这样可以直接在API文档中查看请求体参数的详细信息,包括参数的类型、描述、默认值等。当embed为False时,默认情况下不会嵌入请求体参数,而是以引用的方式显示。
media_type参数是一个str类型的参数,表示数据的媒体类型,默认为"application/json"。这个参数可以指定数据的格式,例如JSON、XML等。
alias参数是一个Optional[str]类型的参数,表示参数的别名。在文档中显示参数的时候可以使用别名,用于更好地描述参数的含义。
title参数是一个Optional[str]类型的参数,表示参数的标题。在文档中显示参数的时候可以使用标题,用于更好地区分参数。
description参数是一个Optional[str]类型的参数,表示参数的描述。在文档中显示参数的时候可以使用描述,用于详细说明参数的作用和用法。
gt参数是一个Optional[float]类型的参数,表示参数的值必须大于指定值。用于限定参数的取值范围。
ge参数是一个Optional[float]类型的参数,表示参数的值必须大于等于指定值。用于限定参数的取值范围。
lt参数是一个Optional[float]类型的参数,表示参数的值必须小于指定值。用于限定参数的取值范围。
le参数是一个Optional[float]类型的参数,表示参数的值必须小于等于指定值。用于限定参数的取值范围。
min_length参数是一个Optional[int]类型的参数,表示参数值的最小长度。用于限定参数值的长度范围。
max_length参数是一个Optional[int]类型的参数,表示参数值的最大长度。用于限定参数值的长度范围。
regex参数是一个Optional[str]类型的参数,表示参数值必须符合指定的正则表达式。用于对参数值进行正则表达式匹配验证。
**extra参数是一个Any类型的可变关键字参数,用于接收额外的参数信息。可以接收任意数量的额外参数,并将其存储在extra参数中,以便在函数内部进行处理。
Done~
作者:然然然也