跳转到主要内容

Django的无侵入式hashids库

项目描述

Django Hashids

Github Actions Code Coverage Python Version PyPI Package License

django-hashids是一个简单且无侵入的Django hashids库。它作为模型字段使用,但不会接触数据库或更改模型。

特性

  • 代理内部模型 pk 字段,但不在数据库中存储该值。
  • 允许通过hashid字符串进行查找和过滤。
  • 可以用作排序键
  • 可以全局指定盐、最小长度和字母表
  • 支持按字段指定自定义盐、最小长度和字母表
  • 支持Django REST Framework序列化器
  • 当在搜索字段中指定字段时,支持Django Admin中的精确ID搜索。
  • 支持常见的过滤查找,如 __iexact、__contains、__icontains,但匹配与 __exact 相同。
  • 支持其他查找:isnull、gt、gte、lt 和 lte。

安装

pip install django-hashids

django-hashids与Django 1.11、2.2、3.0、3.1、3.2、4.0以及python 3.6、3.7、3.8、3.9、3.10进行了测试。

使用方法

HashidsField添加到任何模型中

from django_hashids import HashidsField

class TestModel(Model):
    hashid = HashidsField(real_field_name="id")

TestModel.hashid字段将代理TestModel.id字段,但所有查询都将返回和接收hashids字符串。TestModel.id将按以前的方式工作。

示例

instance = TestModel.objects.create()
instance2 = TestModel.objects.create()
instance.id  # 1
instance2.id  # 2

# Allows access to the field
instance.hashid  # '1Z'
instance2.hashid  # '4x'

# Allows querying by the field
TestModel.objects.get(hashid="1Z")
TestModel.objects.filter(hashid="1Z")
TestModel.objects.filter(hashid__in=["1Z", "4x"])
TestModel.objects.filter(hashid__gt="1Z")  # same as id__gt=1, would return instance 2

# Allows usage in queryset.values
TestModel.objects.values_list("hashid", flat=True) # ["1Z", "4x"]
TestModel.objects.filter(hashid__in=TestModel.objects.values("hashid"))

配置

以下属性可以添加到设置文件中,以设置HashidsField的默认参数

  1. DJANGO_HASHIDS_SALT:默认盐
  2. DJANGO_HASHIDS_MIN_LENGTH:默认最小长度
  3. DJANGO_HASHIDS_ALPHABET:默认字母表

HashidsField 不需要任何参数,但可以提供以下参数来修改其行为。

名称 描述
real_field_name 代理字段名称
hashids_instance 用于该字段的编码/解码的 hashids 实例
salt 用于生成 hashids 的盐
min_length 为该字段生成的 hashids 的最小长度
alphabet 用于生成 hashids 的字母表

参数 hashids_instancesaltmin_lengthalphabet 互斥。有关参数的更多信息,请参阅 hashids-python

支持一些常见的模型参数,如 verbose_name

项目详情


下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

django_hashids-0.7.0.tar.gz (5.3 kB 查看哈希)

上传时间

构建分布

django_hashids-0.7.0-py3-none-any.whl (5.5 kB 查看哈希)

上传时间 Python 3

支持者: