gpt4 book ai didi

python - 如何使用 Pyramid 隐藏 id 序列并提供 "friendly"url?

转载 作者:太空宇宙 更新时间:2023-11-03 16:08:10 24 4
gpt4 key购买 nike

我在数据库中有一个内容列表,并且希望在访问时隐藏主键的序列,以免在 url 中显示。所以我想把这样的事情变成这样:

example.com/post/9854

进入此:

example.com/post/one-two-three-four

虽然显然仍在查询中使用主键。实现这一目标的 Pyramid 方式是什么?

最佳答案

这种“用户友好的 URL 片段”通常被称为“slug”,我认为它来自报纸排版时代。

您通常做的是在模型中添加一个额外的字段来存储 slug。该字段应该是唯一的并带有索引(您甚至可以考虑将其作为模型的主键,具体取决于您在“自然主键与代理主键”辩论中的立场:))

class SurrogatePost(Base):
id = sa.Integer(primary_key=True)
slug = sa.String(unique=True)
title = sa.String()

class NaturalPost(Base)
id = sa.String(primary_key=True)
title = sa.String()

首次保存帖子时,您可以根据帖子标题生成 slug,并且永远不会再次更改它,即使标题发生变化 - 这对于 SEO 和链接很重要。

class Post(Base)
...
def __init__(self, title, body):
self.slug = generate_slug(title)
self.title = title
self.body = body

然后,在您的 View 代码中,您可以使用 slug 在数据库中查找帖子,就像使用主键一样。

   def my_view(request):
slug = request.matchdict['slug']
post = DBSession.query(Post).filter(Post.slug==slug).one()
...

您正在考虑的 URL 架构要求所有帖子的所有 slugs 都必须是唯一的,这可能很烦人。如果您查看许多新闻网站,您会注意到它们使用“组合”URL 方案,其中主键和 slug 都出现在 URL 中:

/posts/123/one-two-three-four
/posts/123-one-two-three-four
etc.

主键用于查找数据库中的数据,slug部分纯粹是为了SEO和可读性。

关于python - 如何使用 Pyramid 隐藏 id 序列并提供 "friendly"url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39566919/

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