對數據庫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)

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章