1
我有一個數據庫中的東西的列表,並希望隱藏訪問時在URL中顯示的主鍵序列。所以,我想談談是這樣的:如何隱藏id序列並使用金字塔提供「友好」url?
example.com/post/9854
到這一點:
example.com/post/one-two-three-four
雖然顯然仍使用在查詢中的主鍵。完成這個的金字塔是什麼?
我有一個數據庫中的東西的列表,並希望隱藏訪問時在URL中顯示的主鍵序列。所以,我想談談是這樣的:如何隱藏id序列並使用金字塔提供「友好」url?
example.com/post/9854
到這一點:
example.com/post/one-two-three-four
雖然顯然仍使用在查詢中的主鍵。完成這個的金字塔是什麼?
這個「用戶友好的URL片段」通常被稱爲「slu」「,我認爲這來自報紙排版鉛時代。
你通常做的是在你的模型中有一個存儲slu additional的附加字段。本場應該是唯一的和索引(你甚至可以考慮擁有它作爲你的模型的主鍵取決於你站在大,其中「自然VS代理主鍵」辯論:))
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()
您生成蛞蝓該帖子的標題爲ONCE,當你的帖子第一次被保存並且不再改變它時,即使標題改變 - 這對於SEO和鏈接是重要的。
class Post(Base)
...
def __init__(self, title, body):
self.slug = generate_slug(title)
self.title = title
self.body = body
然後,在您的視圖代碼中,使用slug在數據庫中查找帖子,就像使用主鍵一樣。
def my_view(request):
slug = request.matchdict['slug']
post = DBSession.query(Post).filter(Post.slug==slug).one()
...
您正在考慮的URL架構要求您的所有帖子的所有slu have必須是唯一的,這可能很煩人。如果你看很多新聞網站,你會發現,他們使用「組合拳」 URL方案,其中兩個主鍵和蛞蝓存在於URL:
/posts/123/one-two-three-four
/posts/123-one-two-three-four
etc.
主鍵用於查找數據庫和slug部分的數據純粹是爲了SEO和可讀性。
如果你理解正確,我想你會想要使用cookies。用你的鍵值設置一個cookie。 –