如何在我的 URL 中加密 <int:pk>?

How can I encrypt <int:pk> inside my URLs?

我认为这是一个愚蠢的问题,但我无论如何也无法解决这个问题。我正在用 Django 中的聊天室构建一个简单的纸牌游戏。当一个mod创建了一个房间,要进入这个房间你需要使用下面的URL:

cardgame/room/<int:pk> 

其中 <int: pk> 的内部被所创建房间的 id 替换。我的问题是一些随机用户可以在没有被邀请的情况下使用 cardgame/room/x 之类的 link 进入 id=x 的房间。我想在创建房间时加密 ID 号,就像创建 Google 会议电话时一样,但我不知道如何使用 Django/Python.

我该怎么做?

如何将 UUID 字段添加到您的模型以创建通用唯一标识符,然后将其用作路径变量?

像这样:

class Room(models.Model):
    unique_id = models.UUIDField(default=uuid.uuid4, unique=True)

可能重复 Using a UUID as a primary key...

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 字段