在 Django 中,主鍵通常是自動遞增的正整數。雖然這是一個實際的預設設置,但它可能會因暴露資料庫中的實體數量而損害隱私。為了解決這個問題,需要一個符合某些要求的客製化解決方案。
受到Instagram 使用的方法的啟發,一個合適的解決方案是根據時間戳和時間戳的組合生成ID隨機位,提供時間和唯一屬性。
ID 產生:
START_TIME = a constant representing a Unix timestamp. def make_id(): t = int(time.time() * 1000) - START_TIME u = random.SystemRandom().getrandbits(23) id = (t << 23) | u return id
模型定義:
class MyClass(models.Model): id = models.BigIntegerField(default=make_id, primary_key=True)
這種方法提供了一種安全有效的方法來在尋址時產生唯一的主鍵問題中概述的具體要求。此外,可以實作reverse_id方法來從ID中擷取建立時間,從而可能不需要額外的欄位。
以上是如何將 Django 的自動遞增主鍵替換為特定模型的唯一、安全的整數 ID?的詳細內容。更多資訊請關注PHP中文網其他相關文章!