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
Mary-Kate Olsenoriginal
2024-11-26 02:41:09639parcourir

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

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!

Déclaration:
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