如何在Django 中將特定表的主鍵替換為唯一整數
在Django 應用程式中,預設主鍵是auto - 遞增的整數,外部使用者可以透過URL 看到該整數。為了保護此訊息,常見的做法是對主鍵進行哈希處理。然而,這種方法可能需要頻繁的哈希和反哈希,效率較低。
解
更好的方法是產生一個唯一的整數,該整數不是全域唯一的,但僅在特定表中唯一。這可以使用時間戳記和隨機元件的組合來實現:
用於產生 ID 的 Python代碼
import time import random START_TIME = time.time() * 1000 # Initial timestamp (arbitrary) def make_id(): """ Generates a unique ID based on a timestamp and random bits. """ t = int(time.time() * 1000) - START_TIME u = random.SystemRandom().getrandbits(23) id = (t << 23) | u return id def reverse_id(id): """ Converts ID back to a timestamp. """ t = id >> 23 return t + START_TIME
Django模型
from django.db import models class MyClass(models.Model): id = models.BigIntegerField(default=make_id, primary_key=True)
優點
優點
以上是如何在沒有全域唯一性的情況下為 Django 模型產生唯一的整數 ID?的詳細內容。更多資訊請關注PHP中文網其他相關文章!