在 Django 中,主键通常是一个自动递增的正整数。虽然这是一个实际的默认设置,但它可能会因暴露数据库中的实体数量而损害隐私。为了解决这个问题,需要一个符合某些要求的定制解决方案。
受到 Instagram 使用的方法的启发,一个合适的解决方案是根据时间戳和时间戳的组合生成 ID随机位,提供时间和唯一属性。
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
模型定义:
class MyClass(models.Model): id = models.BigIntegerField(default=make_id, primary_key=True)
这种方法提供了一种安全有效的方法来在寻址时生成唯一的主键问题中概述的具体要求。此外,可以实现reverse_id方法来从ID中检索创建时间,从而可能不需要额外的字段。
以上是如何将 Django 的自动递增主键替换为特定模型的唯一、安全的整数 ID?的详细内容。更多信息请关注PHP中文网其他相关文章!