是否有必要使用UUID作为PK?

时间:2014-10-01 01:09:22

标签: django primary-key uuid

我还是网络开发的新手,但我理解使用UUID作为模块的主键是不错的做法?

我在Django中构建一个应用程序,在URL中显示一个pk。例如/user/<pk>/<username-slug>/。然后通过匹配PK找到该URL的用户。

将序列整数作为PK的主要问题是什么?似乎stackoverflow就是这样做的。

有没有理由将这个内置到django中?

1 个答案:

答案 0 :(得分:-1)

除非有重要原因,否则您应该使用UUID作为主键。但是,你真正得到的是没有UUID的更好的URL结构,我同意这一点。

我遇到了这个问题,我通过制作一个独特的slug来解决它。我将在下面使用的示例是针对具有不同帖子标题的博客。 post slugs应该是唯一的,以便没有URL冲突:

# urls.py
# url pretty straightforward, get the post slug from the url and pass it into the view
urlpatterns = patterns('',
    url(r'(?P<post_slug>[\w]+)/$', views.post, name="post"),
)


# views.py
# get the post object based on the slug passed in from the url
def post(request, post_slug):
    '''
    individual blog page
    '''
    post = Post.objects.get(Post, slug=post_slug)

    return render(request, "template.html", {'post':post})


# models.py
# save the unique slug to be used based on the title
from django.db import models
from django.utils.text import slugify

class Post(models.Model):
    '''
    Blog Post data which has a unique slug field
    '''
    title = models.CharField(max_length=50)
    slug = models.SlugField(unique=True, blank=True)

    def save(self, *args, **kwargs):
        # add identifying slug field on save
        self.slug = slugify(self.title) # can also make a custom slugify to take out hyphens
        super(Post, self).save(*args, **kwargs)

你有它,你的URL结构将工作,并没有URL中的UUID。它看起来更干净,只需要一点魔力。