Dans Django, la clé primaire est généralement un entier positif auto-incrémenté. Bien que cela constitue une valeur par défaut pratique, cela peut compromettre la confidentialité en exposant le nombre d'entités dans une base de données. Pour répondre à ce problème, une solution personnalisée est nécessaire et respecte certaines exigences.
Inspirée de l'approche utilisée par Instagram, une solution adaptée consiste à générer des identifiants basés sur une combinaison d'horodatages et des bits aléatoires, fournissant des propriétés à la fois temporelles et uniques.
Génération d'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
Définition du modèle :
class MyClass(models.Model): id = models.BigIntegerField(default=make_id, primary_key=True)
Cette approche offre un moyen sécurisé et efficace de générer des clés primaires uniques tout en répondant aux exigences spécifiques décrites dans la question. De plus, la méthode reverse_id peut être implémentée pour récupérer l'heure de création à partir de l'ID, évitant ainsi potentiellement le besoin d'un champ supplémentaire.
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!