首頁 >資料庫 >mysql教程 >如何將 Django 的自動遞增主鍵替換為特定模型的唯一、安全的整數 ID?

如何將 Django 的自動遞增主鍵替換為特定模型的唯一、安全的整數 ID?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-26 02:41:09577瀏覽

How Can I Replace Django's Auto-Incrementing Primary Key with a Unique, Secure Integer ID for Specific Models?

將 Django 的主鍵替換為特定表的唯一整數

在 Django 中,主鍵通常是自動遞增的正整數。雖然這是一個實際的預設設置,但它可能會因暴露資料庫中的實體數量而損害隱私。為了解決這個問題,需要一個符合某些要求的客製化解決方案。

要求

  • 將主鍵欄位類型保留為整數。
  • 透過以下方式最小化效能開銷在記錄插入時僅對主鍵進行一次雜湊處理。
  • 使用不可逆雜湊演算法。
  • 確保特定表內而不是全域的唯一性。
  • 保持雜湊值簡潔,以避免冗長的 URL。

方法:基於時間戳的ID 生成

受到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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn