【发布时间】:2023-02-10 02:10:39
【问题描述】:
假设我有一条允许客户创建新用户的路线
(伪代码)
@app.route("POST")
def create_user(user: UserScheme, db: Session = Depends(get_db)) -> User:
...
我的UserScheme 接受诸如email 之类的字段。我希望能够在不同的模型Settings 中全局设置一些设置(例如max_length)。我如何在方案中访问它?我想在我的方案中访问db。
所以基本上我的方案应该是这样的(给定的代码不起作用):
class UserScheme(BaseModel):
email: str
@validator("email")
def validate_email(cls, value: str) -> str:
settings = get_settings(db) # `db` should be set somehow
if len(value) > settings.email_max_length:
raise ValueError("Your mail might not be that long")
return value
我找不到以某种方式将 db 传递给该方案的方法。我正在考虑在我的路线中验证这些字段(取决于db)。虽然这种方法以某种方式起作用,但错误消息本身不会在特定字段上出现,而是在整个表单上出现,但它应该报告正确字段的错误,以便前端可以正确显示它。
【问题讨论】:
-
这个问题一般适用于 FastAPI + Pydantic 用法,而不仅仅是在“方案”的情况下。我认为更好的标题可能是如何从 Pydantic 验证器访问 FastAPI Depends 值?
标签: python fastapi pydantic starlette