django mysql 主键_Django 用散列隐藏数据库中主键ID

最近看到了一篇讲Django性能测试和优化的文章, 文中除了提到了很多有用的优化方法, 演示程序的数据库模型写法我觉得也很值得参考, 在这单独记录下.

在实际项目中, 有时需要隐藏数据库中表的主键, 我之前采用的大多是为需要隐藏主键ID的表添加一个字段, 再用散列或者UUID等填充来唯一标识一行数据. 而上面提到的文章中则是使用了一个专门生成ID对应散列值的基类, 需要隐藏散列的表可以通过继承这个类来实现隐藏自己的主键ID.

比较特别的是此文的散列值是通过主键ID和ContentType的ID来一起生成的. ContentType是Django自带的一套的框架, 在新模型安装时会自动创建新的ContentType实例, ContentType 实例具有返回它们表示的模型类的方法, 以及从这些模型查询对象的方法. 从而提供一个高层次的, 通用的接口来与模型进行交互.

ContentType使用说明:

通过这样的机制, 解码一个散列值后就可以直接得到对应的Django ORM模型类和实例. 对于一些需要一个集中的地方对模型进行解码并对不同类的不同模型实例进行处理时会很有用.

Hasher 类代码

from django.contrib.contenttypes.models import ContentType

import basehash

class Hasher:

base36 = basehash.base36()

@classmethod

def from_model(cls, obj, klass=None):

if obj.pk is None:

return None

return cls.make_hash(obj.pk, klass if klass is not None else obj)

@classmethod

def make_hash(cls, objec

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值