我想通过我的 URL 引用数据的某些实例。推荐的方法是什么?我应该使用该数据的主键还是会不必要地暴露数据库信息?即使使用 PK,URL 也不是“干净的”。那么您通常如何处理这个问题?
详细信息:
我的网站使用 django。我有一个名为“团队”的模型。任何老师都可以在线创建自己的团队,然后将其添加到数据库中。我不要求团队名称是唯一的。一名教师可以拥有多个团队。
现在,任何“将学生添加到团队”、“为团队分配作业”等操作,都要求在 URL 中传递对团队的引用。像这样的东西:
{{ SITE_URL }}/add-student/{{ team }}/
由于名称不唯一,我无法使用该名称。
目前,我在创建每个团队时为其分配一个 UUID,并在我的 URL 中使用该 uuid。这确实有效,但会导致 URL 变得丑陋。
我可以使用团队的主键,它比 uuid 短,但同样不是一个很好的 URL。我还想知道暴露模型数据库条目的主键是否是一个安全问题?不过,我注意到 SO 似乎在其 URL 中使用了主键。
那么这里的最佳实践是什么?
最佳答案
Django 的基于类的 View (DetailView
、UpdateView
)默认使用 url 中的 pk
作为命名 url 组来确定哪个对象来获取,因此据此判断,我认为在网址中使用 pk
并没有违反任何做法。
如果您想要一个非常难忘的网址,您可以创建一个 slug并附加 pk,虽然不是完美的最佳选择,但仍然比 UUID 更容易记住
我还相信,您的 View 应该验证请求用户是否具有查看 url 的正确权限,这应该独立于实际的 url 结构。
关于sql - 引用 URL 中的对象 - 您使用主键还是最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20552427/