Как я могу зашифровать <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

Вернуться на верх