在Wagtail/Django中添加UID或唯一ID



所以我的问题是如何为CMS生成随机UID或slug。如果我使用来自API v2的默认id,人们可以很容易地猜测我的下一篇文章的URL。

有没有办法为我的wagtail CMS添加一个唯一的slug/ID/UUID?

这是一个简单的解决方案,转到您的bolg/models.py并首先安装pip install django-autoslug

然后导入这个

from django.db.models import CharField, Model
from autoslug import AutoSlugField
from django.utils.crypto import get_random_string

在这里,我们添加了另一个名为get_random_string的扩展,每次调用它时都会生成一个随机字符串

然后将其添加到您的AddStory{您的添加帖子类}中

#Defining a function to get random id every call
def randomid(self):
return(get_random_string(length=10))
# creating a custom slug to show in frontend.
news_slug = AutoSlugField(populate_from='randomid', unique = True, null= True, default=None)

在这里,我定义了一个名为randomid的函数,它将在每次调用时返回一个10位数的字符串。然后,我创建了一个名为news_slug的新字段,它来自Django auto_slug扩展,它将从随机化中填充,并且URL必须是唯一的(例如:如果所有10位字符串都完成了,它将添加-1、-2,依此类推(例如:sxcfsf12e4-1(,这里null = true意味着这个字段可以为空,这样autoslug就可以生成唯一的ID。

然后公开在API中提交的news_slug

api_fields=[
APIField("news_slug"),
]

你可以访问像这个/api/v2/pages/?type=blog.AddStory&fields=*这样的所有字段

这里type=blog是你的blog应用程序,AddStory是你的课程。

希望这能有所帮助,我花了一些时间才发现。更多的wagtail教程将会到来。

我用于用户ID的答案的变体:

import random
import string
from django_extensions.db.fields import AutoSlugField
....
class CustomUser(AbstractUser):
....
uuid = AutoSlugField(unique=True)
....
def slugify_function(self, content):
return ''.join((random.choice(string.ascii_letters + string.digits) for i in range(12)))
  • AutoSlugField是django_extensions的一部分
  • AutoSlugField有一个内置的slugify_函数来生成slug,您可以通过在类中声明自己的函数来覆盖它
  • 此slugify_函数将生成一个随机的12个字母数字字符串,包括大小写。排列是(我认为(1e21,所以猜测的机会非常渺茫

最新更新