Добавление UID или уникального идентификатора в Wagtail/Django

Итак, мой вопрос заключается в том, как я могу сгенерировать случайный UID или slug для моей CMS. Если я использую стандартный идентификатор, который приходит из API v2, люди могут легко угадать URL моего следующего сообщения.

Есть ли способ добавить уникальный slug/ID/UUID для моей wagtail CMS?

Вот простое решение, зайдите в свой bolg/models.py и сначала установите pip install django-autoslug

Тогда импортируйте this

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

Здесь мы добавляем еще одно расширение под названием get_random_string, которое будет генерировать случайную строку каждый раз, когда вы его вызываете.

Затем добавьте это в ваш AddStory {Ваш класс add post}

#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, которое будет заполняться из randomid, и URL должен быть уникальным (например: если все 10-значные строки закончились, он добавит -1,-2 и так далее (например: sxcfsf12e4-1), здесь null = true означает, что это поле может быть пустым, чтобы autoslug мог генерировать уникальный ID.

Тогда выставьте этот news_slug файл в API.

api_fields=[
        APIField("news_slug"),
]

вы можете получить доступ ко всем полям следующим образом /api/v2/pages/?type=blog.AddStory&fields=*

Здесь type=blog - это ваше приложение blog, а AddStory - ваш класс.

Надеюсь, это поможет, мне потребовалось время, чтобы разобраться. Будет больше уроков по трясогузке.

Вариант ответа, который я использую для идентификаторов пользователей:

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_function для генерации slug, вы можете переопределить ее, просто объявив свою собственную в классе
  • .
  • Эта функция slugify_function будет генерировать случайную строку из 12 буквенно-цифровых символов, включая верхний/нижний регистр. Перестановки составляют (я думаю) 1 e21, поэтому шансы угадать крайне малы.
  • .
Вернуться на верх