如何在 Django 中将特定表的主键替换为唯一整数
在 Django 应用程序中,默认主键是 auto - 递增的整数,外部用户可以通过 URL 看到该整数。为了保护此信息,常见的做法是对主键进行哈希处理。然而,这种方法可能需要频繁的哈希和反哈希,效率较低。
解决方案
更好的方法是生成一个唯一的整数,该整数不是全局唯一的,但仅在特定表中唯一。这可以使用时间戳和随机组件的组合来实现:
用于生成 ID 的 Python 代码
import time import random START_TIME = time.time() * 1000 # Initial timestamp (arbitrary) def make_id(): """ Generates a unique ID based on a timestamp and random bits. """ t = int(time.time() * 1000) - START_TIME u = random.SystemRandom().getrandbits(23) id = (t << 23) | u return id def reverse_id(id): """ Converts ID back to a timestamp. """ t = id >> 23 return t + START_TIME
Django模型
from django.db import models class MyClass(models.Model): id = models.BigIntegerField(default=make_id, primary_key=True)
优点
附加说明
以上是如何在没有全局唯一性的情况下为 Django 模型生成唯一的整数 ID?的详细内容。更多信息请关注PHP中文网其他相关文章!