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)
class HashRetrieveViewSetMixin(GenericViewSet):
"""使用Hash检索对象的ViewSet基类""" def get_object(self):
queryset = self.filter_queryset(self.get_queryset()) obj = self.get_obj_from_hash(self.kwargs['pk'], queryset)
self.check_object_permissions(self.request, obj) return obj def get_obj_from_hash(self, hash_id, queryset):
"""根据hash_id获取obj对象"""
pk = self.hash_to_pk(hash_id)
obj = get_object_or_404(queryset, pk=pk)
return obj @staticmethod
def hash_to_pk(hash_id):
"""Hash 转 id"""
try:
pk = Hasher.to_object_pk(hash_id)
except ValueError:
raise ParseError('parse error')
return pk

对数据库ID进行散裂化计算的更多相关文章

  1. 常用数据库ID格式

    转自:http://www.biotrainee.com/thread-411-1-1.html 常用数据库 ID ID 示例 ID 来源 ENSG00000116717 Ensemble ID GA ...

  2. 为什么数据库ID不能作为URL中的标识符

    最近公司在进行网站的SEO优化,将所有主要页面的URL统一更改为新的格式,其中重要的一项改变是将所有URL的标识符统一为ID,例如过去我们的一个用户的公共页面URL是这样的 https://www.e ...

  3. 你不从地址栏中增加曝光量所需的数据库ID方法

    <p><span style="font-size: 18px;"></span></p> 当你想隐藏数据库id时,你能够使用 Ha ...

  4. 关于Webdriver自动化测试时,页面数据与数据库id不一致的处理方式,需要使用鼠标事件

    有时候Web页面需要通过onmouseout事件去动态的获取数据库的数据,在使用Webdriver进行自动化测试的时候,对于页面显示的数据,其在数据库可能会存在一个id或者code,但是id或者cod ...

  5. Talk About AWS Aurora for MySQL max_connections parameter Calculation | 浅谈AWS Aurora for MySQL数据库中 max_connections参数的计算

    1. The Problem | 现象 When connect to the product environment database of my company, the Navicat show ...

  6. GraphX 在图数据库 Nebula Graph 的图计算实践

    不同来源的异构数据间存在着千丝万缕的关联,这种数据之间隐藏的关联关系和网络结构特性对于数据分析至关重要,图计算就是以图作为数据模型来表达问题并予以解决的过程. 一.背景 随着网络信息技术的飞速发展,数 ...

  7. 有朋友问了数据库ID不连续,怎么获取上一篇和下一篇的文章?(不是所有情况都适用)

    呃 (⊙o⊙)…,逆天好久没写SQL了,EF用的时间长了,SQL都不怎么熟悉了......[SQL水平比较菜,大牛勿喷] 方法很多种,说个最常见的处理 因为id是自增长的,所以一般情况下下一篇文章的I ...

  8. delphi 并发取数据库id问题

    这段时间有个项目id频繁出现 id冲突的问题 一真找不到原因 后来想到了个办法 在新建取id时先把到到的id保存起来 上代码 望大神指点下 /// <summary> /// 到表中的最大 ...

  9. oracle数据库ID自增长--序列

    什么是序列?在mysql中有一个主键自动增长的id,例如:uid number primary key auto_increment;在oracle中序列就是类似于主键自动增长,两者功能是一样的,只是 ...

随机推荐

  1. 花椒直播基于golang的中台技术实践

    https://github.com/gopherchina/conference/blob/master/2019/2.7%20花椒直播基于golang的中台技术实践%20-%20周洋.pdf 花椒 ...

  2. UML期末复习题——2.5:System Sequence Diagram & Post-condition

    第五题:系统顺序图 重要概念: 1.对象: 对象是特定行为与属性的集合. 对象的表示方式有三种: a.包括对象名和类名 b.只有类名. c.只有对象名 2.消息表示形式: 消息用于描述对象间交互的方式 ...

  3. SQL-W3School-高级:SQL 通配符

    ylbtech-SQL-W3School-高级:SQL 通配符 1.返回顶部 1. 在搜索数据库中的数据时,您可以使用 SQL 通配符. SQL 通配符 在搜索数据库中的数据时,SQL 通配符可以替代 ...

  4. Eclipse部署时项目中依赖的jar包不能部署到服务器WEB-IN下lib目录

    转: Eclipse部署时项目lib下jar包不能部署到服务器WEB-IN下lib目录及Eclipse下tomcat服务器配置修改 2018年04月07日 11:04:19 拾悦酒吧 阅读数 1046 ...

  5. oracle赋予一个用户具有查询另一个用户所有表数据

    一  以需要被查询的用户登录oracle(假如为A)   B为要查询A用户下的表的用户 二  执行查询语句: select 'grant select on A.'|| tname ||' to  B ...

  6. 用VLC读取摄像头产生RTSP流,DSS侦听并转发(二)

    用VLC读取摄像头产生RTSP流,DSS侦听并转发(二) 之前介绍过<用VLC读取摄像头产生RTSP流,DSS主动取流转发(一)>本文介绍另一种方法. 摄像机地址是192.1.101.51 ...

  7. gitlab安装、下载、推送 代码(推荐)

    环境: 内存必须5G以上 centos7.5 服务端:192.168.0.74 客户端:192.168.0.73 GitLab的安装 1.在CentOS系统上,下面的命令将会打开系统防火墙HTTP和S ...

  8. Python3 Selenium自动化web测试 ==> 第十一节 WebDriver高级应用 -- 显示等待 + 二次封装

    学习目的: 掌握显示等待 掌握二次封装 正式步骤: step1:显示等待的代码示例 # -*- coding:utf-8 -*- from selenium import webdriver from ...

  9. EuRoc V203数据集的坑

    EuRoc数据集时间戳问题 以前听别人说过V203序列有问题,今儿仔细看了才发现EuRoc的V203数据集中的左右相机 照片数量不相等,很僵硬,cam0存在大量丢帧,之前一直用单目数据,没什么感觉.. ...

  10. Fabric1.4 背书策略 .yam文件

    { identities: [ // 以下几项自动编号为[0,1,2] { role: { name: "member", mspId: "peerOrg1" ...