Rumah > Artikel > pangkalan data > Bagaimanakah Saya Boleh Mengelirukan Kunci Utama Django dengan Selamat Menggunakan Pengecam Integer Unik?
Mengkaburkan Kunci Utama Django dengan Pengecam Integer Unik
Dalam Django, kunci utama lazimnya ialah integer bertambah automatik yang berfungsi sebagai unik pengecam bagi setiap baris dalam jadual. Walau bagaimanapun, mendedahkan kunci ini dalam URL atau konteks lain yang dihadapi awam boleh menjejaskan privasi dan keselamatan. Artikel ini meneroka pendekatan alternatif untuk mengelirukan kunci utama sambil mengekalkan sifat uniknya.
Keperluan
Pendekatan
Untuk menangani perkara ini keperluan, penyelesaian yang serupa dengan sistem penjanaan ID Instagram dicadangkan. Pendekatan ini melibatkan penjanaan ID unik yang terdiri daripada komponen berasaskan masa dan komponen rawak.
Fungsi untuk Penjanaan ID
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
Fungsi make_id menjana ID unik menggunakan komponen berasaskan masa 41-bit dan komponen rawak 23-bit. Fungsi reverse_id membenarkan untuk mengekstrak cap masa daripada ID yang dijana.
Model
from django.db import models class MyClass(models.Model): id = models.BigIntegerField(default=make_id, primary_key=True)
Dengan menggunakan fungsi make_id sebagai nilai lalai untuk medan id, baharu rekod akan diberikan ID unik apabila dimasukkan. Pendekatan ini memastikan bahawa medan Kunci Utama mengekalkan jenis data integernya, sambil mengaburkan sifat urutannya. Selain itu, komponen rawak ID menghalang perlanggaran walaupun semasa sisipan serentak.
Penggunaan
Dengan pelaksanaan ini, nilai kunci utama akan menjadi integer unik yang ringkas dan tahan pendedahan sambil mengekalkan fungsi utama utamanya.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengelirukan Kunci Utama Django dengan Selamat Menggunakan Pengecam Integer Unik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!