有两个类似的 pydantic 对象。唯一的区别是有些字段是可选的。如何只定义一个对象中的字段并扩展到另一个对象中?
class ProjectCreateObject(BaseModel):
project_id: str
project_name: str
project_type: ProjectTypeEnum
depot: str
system: str
...
class ProjectPatchObject(ProjectCreateObject):
project_id: str
project_name: Optional[str]
project_type: Optional[ProjectTypeEnum]
depot: Optional[str]
system: Optional[str]
...
Run Code Online (Sandbox Code Playgroud) 这是我的计划,但无法生成到 OpenAPI 文档的身份验证部分。
class HMACModel(BaseModel):
api_key: APIKey = APIKey(**{"in": APIKeyIn.header}, name='Api-Key')
signature: APIKey = APIKey(**{"in": APIKeyIn.header}, name='Signature')
class HMACAuth(APIKeyBase):
model = HMACModel()
scheme_name = 'HMACAuth'
async def __call__(self, request: Request):
api_key = request.headers.get('Api-Key')
signature = request.headers.get('Signature')
print(f's:{signature}, k:{api_key}')
do_some_check()
return api_key
@app.get('/')
async def test_api(req: ReqModel, api_key=Depends(HMACAuth())):
pass
Run Code Online (Sandbox Code Playgroud)
当OpenAPI对象初始化并带有分析输出时,似乎自定义模型将被忽略OpenAPI(**output)。(输出中有安全模式,但OpenAPI对象中有missd)。
(参考代码:https://github.com/tiangolo/fastapi/blob/d60dd1b60e0acd0afcd5688e5759f450b6e7340c/fastapi/openapi/utils.py#L372)