首页 >数据库 >mysql教程 >如何将 Django 的自动递增主键替换为特定模型的唯一、安全的整数 ID?

如何将 Django 的自动递增主键替换为特定模型的唯一、安全的整数 ID?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-26 02:41:09577浏览

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

将 Django 的主键替换为特定表的唯一整数

在 Django 中,主键通常是一个自动递增的正整数。虽然这是一个实际的默认设置,但它可能会因暴露数据库中的实体数量而损害隐私。为了解决这个问题,需要一个符合某些要求的定制解决方案。

要求

  • 将主键字段类型保留为整数。
  • 通过以下方式最小化性能开销在记录插入时仅对主键进行一次哈希处理。
  • 使用不可逆哈希算法。
  • 确保特定表内而不是全局的唯一性。
  • 保持哈希值简洁,以避免冗长的 URL。

方法:基于时间戳的 ID 生成

受到 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn