Heim >Datenbank >MySQL-Tutorial >Wie kann ich den automatisch inkrementierenden Primärschlüssel von Django durch eine eindeutige, sichere Ganzzahl-ID für bestimmte Modelle ersetzen?

Wie kann ich den automatisch inkrementierenden Primärschlüssel von Django durch eine eindeutige, sichere Ganzzahl-ID für bestimmte Modelle ersetzen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-26 02:41:09577Durchsuche

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

Ersetzen Sie den Primärschlüssel von Django durch eine eindeutige Ganzzahl für bestimmte Tabellen

In Django ist der Primärschlüssel normalerweise eine automatisch inkrementierte positive Ganzzahl. Dies ist zwar eine praktische Standardeinstellung, kann jedoch den Datenschutz gefährden, indem die Anzahl der Entitäten in einer Datenbank offengelegt wird. Um dieses Problem anzugehen, ist eine maßgeschneiderte Lösung erforderlich, die bestimmte Anforderungen erfüllt.

Anforderungen

  • Primärschlüsselfeldtyp als Ganzzahl beibehalten.
  • Leistungsaufwand minimieren um Hashing des Primärschlüssels nur einmal beim Einfügen des Datensatzes.
  • Verwenden Sie ein irreversibles Hashing Algorithmus.
  • Stellen Sie die Eindeutigkeit innerhalb einer bestimmten Tabelle und nicht global sicher.
  • Halten Sie den Hash-Wert kurz, um lange URLs zu vermeiden.

Ansatz: Zeitstempelbasierte ID-Generierung

Inspiriert durch den Ansatz von Instagram besteht eine geeignete Lösung darin, IDs basierend auf einer Kombination von Zeitstempeln zu generieren und Zufallsbits, die sowohl zeitliche als auch eindeutige Eigenschaften bereitstellen.

Code-Implementierung

ID-Generierung:

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

Modelldefinition:

class MyClass(models.Model):
    id = models.BigIntegerField(default=make_id, primary_key=True)

Dieser Ansatz bietet eine sichere und effiziente Möglichkeit, eindeutige Primärschlüssel zu generieren und gleichzeitig die in aufgeführten spezifischen Anforderungen zu erfüllen die Frage. Darüber hinaus kann die Methode „reverse_id“ implementiert werden, um die Erstellungszeit aus der ID abzurufen, wodurch möglicherweise die Notwendigkeit eines zusätzlichen Felds entfällt.

Das obige ist der detaillierte Inhalt vonWie kann ich den automatisch inkrementierenden Primärschlüssel von Django durch eine eindeutige, sichere Ganzzahl-ID für bestimmte Modelle ersetzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn