对数据库ID进行散裂化计算

import basehash


class Hasher:
    """
    对数据库ID进行散列化计算
    """
    base36 = basehash.base62(11)

    @classmethod
    def from_model(cls, obj):
        if obj.pk is None:
            return None
        return cls.make_hash(obj.pk)

    @classmethod
    def make_hash(cls, object_pk):
        return cls.base36.hash('%(object_pk)d' % {
            'object_pk': object_pk
        })

    @classmethod
    def to_object_pk(cls, obj_hash):
        unhashed = '%d' % cls.base36.unhash(obj_hash)
        object_pk = int(unhashed)
        return object_pk
class BaseModel(models.Model):
    """自定义Model基类"""
    create_at = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
    update_at = models.DateTimeField(auto_now=True, verbose_name='更新时间')
    delete_at = models.DateTimeField(null=True, blank=True, default=None, verbose_name='删除时间')

    class Meta:
        abstract = True

    @property
    def hash(self):
        return Hasher.from_model(self)

猜你喜欢

转载自www.cnblogs.com/52-qq/p/11286570.html