您可以在JSON模式中定义额外的信息。
一个常见的用例是添加一个将在文档中显示的example。
有几种方法可以声明额外的 JSON 模式信息。
您可以使用 Config 和 schema_extra 为Pydantic模型声明一个示例,如Pydantic 文档:定制 Schema 中所述:
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
class Config:
schema_extra = {
"example": {
"name": "Foo",
"description": "A very nice Item",
"price": 35.4,
"tax": 3.2,
}
}
@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item):
results = {"item_id": item_id, "item": item}
return results
这些额外的信息将按原样添加到输出的JSON模式中。
在 Field, Path, Query, Body 和其他你之后将会看到的工厂函数,你可以为JSON 模式声明额外信息,你也可以通过给工厂函数传递其他的任意参数来给JSON 模式声明额外信息,比如增加 example:
from typing import Optional
from fastapi import FastAPI
from pydantic import BaseModel, Field
app = FastAPI()
class Item(BaseModel):
name: str = Field(..., example="Foo")
description: Optional[str] = Field(None, example="A very nice Item")
price: float = Field(..., example=35.4)
tax: Optional[float] = Field(None, example=3.2)
@app.put("/items/{item_id}")
async def update_item(item_id: int, item: Item):
results = {"item_id": item_id, "item": item}
return results
Warning
请记住,传递的那些额外参数不会添加任何验证,只会添加注释,用于文档的目的。
你可以通过传递额外信息给 Field 同样的方式操作Path, Query, Body等。
比如,你可以将请求体的一个 example 传递给 Body:
from typing import Optional
from fastapi import Body, FastAPI
from pydantic import BaseModel
app = FastAPI()
class Item(BaseModel):
name: str
description: Optional[str] = None
price: float
tax: Optional[float] = None
@app.put("/items/{item_id}")
async def update_item(
item_id: int,
item: Item = Body(
...,
example={
"name": "Foo",
"description": "A very nice Item",
"price": 35.4,
"tax": 3.2,
},
),
):
results = {"item_id": item_id, "item": item}
return results
使用上面的任何方法,它在 /docs 中看起来都是这样的:
关于 example 和 examples...
JSON Schema在最新的一个版本中定义了一个字段 examples ,但是 OpenAPI 基于之前的一个旧版JSON Schema,并没有 examples.
所以 OpenAPI为了相似的目的定义了自己的 example (使用 example, 而不是 examples), 这也是文档 UI 所使用的 (使用 Swagger UI).
所以,虽然 example 不是JSON Schema的一部分,但它是OpenAPI的一部分,这将被文档UI使用。
同样的方法,你可以添加你自己的额外信息,这些信息将被添加到每个模型的JSON模式中,例如定制前端用户界面,等等。
FastAPI 支持同时使用File和Form定义文件和表单字段。说明接收上传文件或表单数据,要预先安装python-multipart。例如,pip inst...
通过向规则参数添加变量部分,可以动态构建URL。此变量部分标记为variable-name。它作为关键字参数传递给与规则相关联的函数。在...
Web API 的工作通常与 HTTP 动词紧密相关,所以这使得实现这样一个基于MethodView类的 API 很有意义。也就是说,你会注意到 ...
为了在请求/响应周期之外测试基于类的视图,你必须确保它们配置正确,在实例化之后调用 setup()。例如,假设基于类的视图如...
简介dynamic-datasource-spring-boot-starter是一个基于springboot的快速集成多数据源的启动器。其支持Jdk1.7+,Spring...
动态SQL中的插入脚本语言MyBatis从3.2版本开始支持插入脚本语言,这允许你插入一种语言驱动,并基于这种语言来编写动态SQL查询语...
Spring 有可能成为所有企业应用程序的一站式服务点,然而,Spring 是模块化的,允许你挑选和选择适用于你的模块,不必要把剩余部...
JSP指令用来设置整个JSP页面相关的属性,如网页的编码方式和脚本语言。语法格式如下: %@ directive attribute="value" %指令可...
Swift 字典Swift 字典用来存储无序的相同类型数据的集合,Swift 数组会强制检测元素的类型,如果类型不同则会报错。Swift 字典每...