Как я могу зашифровать <int:pk> внутри моих URL?
Думаю, это глупый вопрос, но я все равно не могу решить эту проблему. Я создаю простую карточную игру с чатами на Django. Когда мод создает комнату, для входа в эту комнату нужно использовать следующий URL:
cardgame/room/<int:pk>
где внутри <int: pk> заменяется на id созданной комнаты. Моя проблема заключается в том, что случайный пользователь может войти в комнату id=x, просто используя ссылку типа cardgame/room/x без приглашения. Я хотел бы шифровать id номер каждый раз, когда создается комната, как при создании Google meet call, но я не знаю, как это сделать с помощью Django/Python.
Как я могу это сделать?
Как насчет добавления поля UUID в вашу модель для создания универсально уникальных идентификаторов, а затем использования его в качестве переменной пути?
Что-то вроде этого:
class Room(models.Model):
unique_id = models.UUIDField(default=uuid.uuid4, unique=True)
Возможный дубликат Использование UUID в качестве первичного ключа...
import uuid
from django.db import models
class MyUUIDModel(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
Это изменяет поведение моделей django по умолчанию, которые создают id как AutoField. Либо вы можете сделать это, либо добавить дополнительное поле uuid