为仓储添加其他功能¶
虽然你需要的大多数功能都内置在仓储中,但仍然存在你需要添加其他功能的情况。让我们探讨一下如何在仓储模式之上添加功能的方法。
小技巧
本教程的完整代码可以在下面的 完整代码 部分找到。
Slug 字段¶
在这个示例中,我们使用 BlogPost 模型来保存博客文章标题和内容。此模型的主键是 UUID 类型。UUID 和 int 是主键的良好选择,但你可能不想在路由中使用它们有许多原因。例如,在 URL 中暴露基于整数的主键可能存在安全问题。虽然 UUID 没有这个问题,但它们不是用户友好的或易于记忆的,并创建复杂的 URL。解决此问题的一种方法是向表中添加用户友好的唯一标识符,可用于 URL。这通常称为"slug"。
首先,我们将创建一个 SlugKey 字段混入,它向表中添加基于文本的、URL 友好的、唯一列 slug。我们希望确保根据传递给 title 字段的数据创建 slug 值。为了演示我们试图实现的目标,我们希望博客标题为"Follow the Yellow Brick Road!"的记录具有"follow-the-yellow-brick-road"的 slugified 值。
由于 BlogPost.title 字段未标记为唯一,这意味着我们必须在插入之前测试 slug 值的唯一性。如果找到初始 slug,则会在 slug 末尾附加一组随机数字以使其唯一。
我们现在已准备好在路由中使用它。首先,我们将传入的 Pydantic 模型转换为字典。接下来,我们将为文本获取唯一的 slug。最后,我们使用添加的 slug 插入模型。
备注
使用此方法会在每次插入时引入额外的查询。在确定哪些字段实际需要此类功能时应考虑这一点。