Obscurcir la clé primaire de Django avec des identifiants entiers uniques
Dans Django, la clé primaire est généralement un entier auto-incrémenté qui sert d'entier unique identifiant de chaque ligne d'un tableau. Cependant, exposer cette clé dans des URL ou dans d’autres contextes publics peut compromettre la confidentialité et la sécurité. Cet article explore une approche alternative pour obscurcir la clé primaire tout en conservant sa nature unique.
Exigences
Approche
Pour répondre à ces exigences, une solution similaire au système de génération d'identifiants d'Instagram est proposée. Cette approche consiste à générer des identifiants uniques composés d'une composante basée sur le temps et d'une composante aléatoire.
Fonction de génération d'identifiants
import time import random START_TIME = int(time.time() * 1000) # Some constant timestamp def make_id(): t = int(time.time() * 1000) - START_TIME u = random.SystemRandom().getrandbits(23) id = (t << 23) | u return id def reverse_id(id): t = id >> 23 return t + START_TIME
La fonction make_id génère des identifiants uniques en utilisant une composante temporelle de 41 bits et une composante aléatoire de 23 bits. La fonction reverse_id permet d'extraire l'horodatage de l'ID généré.
Modèle
from django.db import models class MyClass(models.Model): id = models.BigIntegerField(default=make_id, primary_key=True)
En utilisant la fonction make_id comme valeur par défaut pour le champ id, nouveau les enregistrements se verront attribuer des identifiants uniques lors de leur insertion. Cette approche garantit que le champ Clé primaire conserve son type de données entier, tout en masquant sa nature séquentielle. De plus, le composant aléatoire de l'ID empêche les collisions même lors d'insertions simultanées.
Utilisation
Avec cette implémentation, les valeurs de clé primaire seront des entiers uniques, concis et résistant à l'exposition tout en conservant leur fonctionnalité de clé primaire.
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!