📜  在 django 中使用 slug 或 .. 而不是 pk (1)

📅  最后修改于: 2023-12-03 15:37:19.590000             🧑  作者: Mango

在 Django 中使用 Slug 或 .. 而不是 PK

在 Django 中,通常使用自增长的整数作为主键 (PK)。然而,在某些情况下,使用 Slug 或其他唯一标识符作为主键会更有用。

Slug 是一种用于 URL 的短、人类友好的字符串。在 Django 中,可以使用自带的 SlugField 或创建自定义的 Slug 类型来存储 Slug。

为什么使用 Slug 或唯一标识符?
  1. 更人性化的 URL: 当用户看到 URL 中的 Slug 时,能够更容易理解该页面的内容。

  2. 保护隐私: 将 PK 作为 URL 中的参数可能会暴露数据库中的某些信息。使用 Slug 或其他唯一标识符可以避免这种情况。

  3. 简化 URL: 使用自增长整数作为主键,URL 中需要添加 /pk/ 这一部分。使用 Slug 或其他唯一标识符可以简化 URL。

如何实现 Slug 或唯一标识符?

可以通过 Django 自带的 SlugField 或创建自定义模型字段来存储 Slug。

from django.db import models
from django.utils.text import slugify

class YourModel(models.Model):
    name = models.CharField(max_length=1000)
    slug = models.SlugField(unique=True)

    def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.name)
        super().save(*args, **kwargs)

在上面的例子中,我们使用了 slugify() 方法将名称转换为 Slug。我们还覆盖了默认的 save() 方法来自动创建 Slug。 请记住,Slug 应该是唯一的。

另一种方法是,可以在视图函数中使用唯一标识符作为 URL 参数。

from django.shortcuts import render, get_object_or_404
from .models import YourModel

def your_view(request, slug):
    item = get_object_or_404(YourModel, slug=slug)
    context = {'item': item}
    return render(request, 'your_template.html', context)

在上述视图函数中,我们根据 Slug 获取数据库中的对象。

总结

在某些情况下,使用 Slug 或其他唯一标识符作为主键会更有用。这能够提供更人性化的 URL、保护隐私以及简化 URL。使用 SlugField 或创建自定义模型字段可以实现 Slug。在视图函数中,也可以使用唯一标识符作为 URL 参数来获取对象。

参考资料