sql - 引用 URL 中的对象 - 您使用主键还是最佳实践是什么?

标签 sql django database-design django-models django-database

我想通过我的 URL 引用数据的某些实例。推荐的方法是什么?我应该使用该数据的主键还是会不必要地暴露数据库信息?即使使用 PK,URL 也不是“干净的”。那么您通常如何处理这个问题?

详细信息:

我的网站使用 django。我有一个名为“团队”的模型。任何老师都可以在线创建自己的团队,然后将其添加到数据库中。我不要求团队名称是唯一的。一名教师可以拥有多个团队。

现在,任何“将学生添加到团队”、“为团队分配作业”等操作,都要求在 URL 中传递对团队的引用。像这样的东西:

 {{ SITE_URL }}/add-student/{{ team }}/

由于名称不唯一,我无法使用该名称。

目前,我在创建每个团队时为其分配一个 UUID,并在我的 URL 中使用该 uuid。这确实有效,但会导致 URL 变得丑陋。

我可以使用团队的主键,它比 uuid 短,但同样不是一个很好的 URL。我还想知道暴露模型数据库条目的主键是否是一个安全问题?不过,我注意到 SO 似乎在其 URL 中使用了主键。

那么这里的最佳实践是什么?

最佳答案

Django 的基于类的 View (DetailViewUpdateView)默认使用 url 中的 pk 作为命名 url 组来确定哪个对象来获取,因此据此判断,我认为在网址中使用 pk 并没有违反任何做法。

如果您想要一个非常难忘的网址,您可以创建一个 slug并附加 pk,虽然不是完美的最佳选择,但仍然比 UUID 更容易记住

我还相信,您的 View 应该验证请求用户是否具有查看 url 的正确权限,这应该独立于实际的 url 结构。

关于sql - 引用 URL 中的对象 - 您使用主键还是最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20552427/

相关文章:

PHP搜索功能显示null

sql - 从具有另一个表外键的表中删除重复行?

sql - 如何在两个独立的 MySQL 连接之间执行 SQL 语句?

django - 带有中间件的自定义身份验证后端

database-design - RethinkDb 中唯一的整数计数器

C#/Sqlite 将查询结果存储为变量的简单方法

python - 使用 ._meta Django

python - 带有单个按钮的 Django 文件上传表单

mysql - 当某些记录有月/日/年而其他记录只有年份时如何存储日期?

mysql - 从 django 检索 mysql 输出 'manage.py sql appname'