【发布时间】:2021-09-13 09:15:32
【问题描述】:
我想实现以下目标:
- 我的应用程序包含一些“子域”,它们对应于应用程序的不同部分。
- 每个域都有自己的实体
- 我想写一个这样的控制器:
@app.get("/{domain}/entity/{entity}/{id}")
async def read_users(domain: Domain, entity: Entity, id: Int):
pass
考虑到 Entity 将是一个 Enum,它可能会随着所选域而改变。
例如,如果域是“架构”,实体可以定义为:
class Entity(str, Enum):
building = "building"
floor = "floor"
但如果选择的域是“车辆”,匹配的实体将是:
class Entity(str, Enum):
engine = "engine"
wheels = "wheels"
更一般地说,我想我正在寻找一种使路径参数验证依赖于另一个路径参数的方法。
这样:
-
GET /architecture/entity/floor/1有效,因为floor是域architecture的有效实体 -
GET /vehicle/entity/wheels/5有效,因为wheels是域vehicle的有效实体 -
GET /architecture/entity/engine/1无效,因为engine不是域architecture的有效实体
有什么办法可以做到吗?
【问题讨论】:
-
您的
Domain模型是什么样的?它与Entity模型有什么关系? -
Domain可以看作是Entity模型的集合。我的目标是能够使用 JSON 等动态配置定义域和它们包含的实体模型。 -
如果没有数据结构的示例,很难理解您在说什么。
Domain将包含Entity值的 JSON 字段?如果是,您将如何在您的GET请求中传递它们?另外,你的Domain和Entity都是enums(而不是Basemodels的子类)所以我不相信Pydantic 验证器可以在那里工作。
标签: python url fastapi pydantic