gpt4 book ai didi

mysql - 通过存储 absolute_url 消除 django 中额外的 DBQueries

转载 作者:行者123 更新时间:2023-11-29 01:00:34 25 4
gpt4 key购买 nike

使用 Django 博客,我有一个如下所示的模板:

<a href="{{ post.get_absolute_url }}">{{ post.title }}</a>

这看起来无伤大雅,但它最终会生成对博文用户的又一次查找,这是我(在大多数情况下)已经知道的。然而,这不是我的意思。

URL 如下所示:

http://localhost:8000/blog/post/mark/2010/08/Aspect-Oriented-Prog/

它看起来像这样的部分原因是 URL 在某种程度上是不言自明的,并且不会随时间而改变。

我很好奇的是,将此 URL 与博客文章一起存储在数据库中可能会出现哪些问题?如果它不应该改变,我将它存储在那里,然后获取博客,为我提供 absolute_url,而无需获取用户并重建 URL。

我认为我存储的部分不包括/blog/post,但包括帖子特定信息,以便我可以执行以下操作:

{% url blog-post blog %} 并将其粘贴在一起。

只是为了记录,是的,我可以做 selected_related,除了我的情况,我实际上是从事件日志中倒过来的,我在其中获取对象,如下所示:

def get_edited_object(self):
"Returns the edited object represented by this log entry"
return self.content_type.get_object_for_this_type(pk=self.object_id)

我还没有想出如何添加与此相关的选择,但想知道我是否需要,因为我可以将 absolute_url 添加到对象本身。

我意识到这有点主观,但我真正需要的是有人扮演魔鬼的角色,为我辩护为什么我不应该这样做,因为它看起来简单明了,我看不出有什么理由不这样做。

p>

最佳答案

我认为这是规范化与非规范化的一个例子。规范化学派会争辩说,如果您有必要的信息来创建数据库中可用的 URL,那么您应该计算它而不是存储和检索。非规范化会让你不用每次都计算它就可以逃脱。

我会尝试扮演魔鬼的代言人。我有两个论点。

  1. 如果您出于任何原因决定更改您的 URL 架构 - 例如迁移到另一个顶级域,或更改路径中的任何元素(例如“/b”而不是“/blog”),那么您您手上会有不必要的数据迁移。

  2. 允许用户编辑博客文章。如果用户更改了她的博客文章的标题,则必须重新生成 slug,这反过来意味着必须重新计算和存储 URL。

  3. 如果用户句柄可以更改(我知道这不太可能,但我见过允许您这样做的网站),那么您必须重新计算和存储。

关于mysql - 通过存储 absolute_url 消除 django 中额外的 DBQueries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3589420/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com