Django - 用于识别一个对象的URL设计和最佳实践

Mar*_*oni 9 django url identifier

我实际上在django项目中工作,我不确定访问一个特定对象页面的URL的最佳格式.

我在想这些替代方案:

1) Using the autoincremental ID => .com/object/15
Run Code Online (Sandbox Code Playgroud)

这是最简单和众所周知的方法."id_object"是数据库引擎在保存对象时生成的自动增量ID.我以这种方式找到的问题是URL是简单的可迭代的.因此,我们可以通过增加URL中的ID来创建一个简单的脚本并访问所有页面.也许是一个安全问题.

2) Using a <hash_id> => .com/object/c30204225d8311e185c3002219f52617
Run Code Online (Sandbox Code Playgroud)

"hash_id"应该是一些字母数字字符串值,例如使用uuid函数生成.这是一个好主意,因为它不可迭代.但生成"随机"唯一ID可能会导致一些问题.

3) Using a Slug => .com/object/some-slug-generated-with-the-object
Run Code Online (Sandbox Code Playgroud)

Django为模型提供了一个"slug"字段,它可用于识别URL中的对象.我在这种情况下发现的问题是slug可能会在时间上发生变化,从而产生损坏的URL.如果某些搜索引擎(如Google)已将此网址编入索引,则可能会将用户引导至"未找到"网页,我们的网页排名可能会降低.冻结弹头可以解决问题.我的意思是,仅在"添加"操作中保存slug,而不是在"Update"操作中保存.但是slu the现在可以代表旧的或不正确的东西.

所有选项都有优点和缺点.可能会使用它们的某些组合可以解决一些问题.你觉得怎么样?

san*_*lto 6

我认为最好的选择是:

.com/object/AUTOINCREMENT_ID/SLUG_FIELD
Run Code Online (Sandbox Code Playgroud)

为什么?

第一个原因: AUTOINCREMENT_ID对于用户识别对象很简单.例如,在电子商务网站中,如果用户想要多次访问该页面(因为他不确定购买该产品),他将识别该URL.

第二个原因: slug字段将防止某人在网页上进行迭代并使人们更清楚URL.

.com/object/10/ford-munstang-2010比清楚的更清楚.com/object/c30204225d8311e185c3002219f52617

  • 这是最好的例子:`http:// stackoverflow.com/questions/9400920/django-url-design-best-practices-for-identify-one-object`这里他们使用`/ AUTOINCREMENT_ID/SLUG_FIELD` (2认同)
  • 另外,我们可以通过编辑数据库序列(在PostgreSQL的情况下)来解决迭代问题,例如设置"增量"值为2 o 3.这样我们生成一个中间有"洞"的序列,避免迭代.如果我们不希望用户意识到我们拥有的内容量,我们可以用随机大数字开始序列并从中开始计数.所以,通过这种方式,我们解决了所有问题!以下是PostgreSQL中sequece版本的链接:`http:// www.postgresql.org/docs/8.1/static/sql-altersequence.html` (2认同)