Добавление 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, поэтому шансы угадать крайне малы. .