Maison > base de données > tutoriel mysql > Comment puis-je remplacer la clé primaire à incrémentation automatique de Django par un identifiant entier unique et sécurisé pour des modèles spécifiques ?

Comment puis-je remplacer la clé primaire à incrémentation automatique de Django par un identifiant entier unique et sécurisé pour des modèles spécifiques ?

Mary-Kate Olsen
Libérer: 2024-11-26 02:41:09
original
575 Les gens l'ont consulté

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

Remplacer la clé primaire de Django par un entier unique pour des tables spécifiques

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.

Exigences

  • Conserver le type de champ de clé primaire comme entier.
  • Minimiser la surcharge de performances en hacher la clé primaire une seule fois lors de l'insertion de l'enregistrement.
  • Utiliser un hachage irréversible algorithme.
  • Garantir l'unicité au sein d'une table spécifique plutôt que globalement.
  • Gardez la valeur hachée concise pour éviter les URL longues.

Approche : génération d'ID basée sur l'horodatage

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.

Mise en œuvre du code

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
Copier après la connexion

Définition du modèle :

class MyClass(models.Model):
    id = models.BigIntegerField(default=make_id, primary_key=True)
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal