Comment remplacer la clé primaire par un entier unique pour une table spécifique dans Django
Dans les applications Django, la clé primaire par défaut est une clé automatique -entier incrémenté, qui peut être visible par les utilisateurs externes via des URL. Pour protéger ces informations, une pratique courante consiste à hacher la clé primaire. Cependant, cette méthode peut nécessiter des hachages et des déhachages fréquents, ce qui peut s'avérer inefficace.
Solution
Une meilleure approche consiste à générer un entier unique qui n'est pas unique au niveau mondial mais uniquement unique dans une table spécifique. Ceci peut être réalisé en utilisant une combinaison d'un horodatage et d'un composant aléatoire :
Code Python pour générer des identifiants
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 Modèle
from django.db import models class MyClass(models.Model): id = models.BigIntegerField(default=make_id, primary_key=True)
Avantages
Notes supplémentaires
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!