一个用于生成简洁、明确且URL安全的UUID的生成库。
项目描述
描述
shortuuid
是一个简单的Python库,用于生成简洁、明确且URL安全的UUID。
通常,需要在用户可以看到的地方使用非连续的ID,但ID必须尽可能简洁和易于使用。shortuuid
通过使用Python内置的uuid
模块生成uuid,然后将其转换为base57,使用小写和大写字母以及数字,并移除类似字符,如l、1、I、O和0。
安装
要安装shortuuid
,您需要
- Python 3.6+
如果您有依赖项,您有多种安装选项
- 使用pip(推荐),执行
pip install shortuuid
。 - 使用setuptools,执行
easy_install shortuuid
。 - 要安装源代码,从https://github.com/stochastic-technologies/shortuuid下载,然后运行
python setup.py install
。
使用方法
要使用shortuuid
,只需将其导入到您的项目中,如下所示
>>> import shortuuid
然后您可以生成一个简短的UUID
>>> shortuuid.uuid()
'vytxeTZskVKR7C7WgdSP3d'
如果您想使用版本 5 的 UUID,可以将名称(DNS 或 URL)传递给调用,它将被用作命名空间(uuid.NAMESPACE_DNS
或 uuid.NAMESPACE_URL
)以生成相应的 UUID
>>> shortuuid.uuid(name="example.com")
'exu3DTbj2ncsn9tLdLWspw'
>>> shortuuid.uuid(name="<http://example.com>")
'shortuuid.uuid(name="<http://example.com>")'
您还可以使用 os.urandom()
内部生成一个加密安全的随机字符串
>>> shortuuid.ShortUUID().random(length=22)
'RaF56o2r58hTKT7AYS9doj'
要查看正在使用的字符集以生成新的 UUID
>>> shortuuid.get_alphabet()
'23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'
如果您想使用自己的字符集来生成 UUID,请使用 set_alphabet()
>>> shortuuid.set_alphabet("aaaaabcdefgh1230123")
>>> shortuuid.uuid()
'0agee20aa1hehebcagddhedddc0d2chhab3b'
默认的字符集与正则表达式 [2-9A-HJ-NP-Za-km-z]{22}
匹配。
shortuuid
将自动对您的字符集进行排序和删除重复项,以确保一致性
>>> shortuuid.get_alphabet()
'0123abcdefgh'
如果默认的 22 位数字对您来说太长,您可以通过截断字符串到所需长度来获取更短的 ID。这些 ID 将不再是全局唯一的,但碰撞的概率仍然非常低。
要序列化现有的 UUID,请使用 encode()
和 decode()
>>> import uuid
>>> u = uuid.uuid4()
>>> u
UUID('6ca4f0f8-2508-4bac-b8f1-5d1e3da2247a')
>>> s = shortuuid.encode(u)
>>> s
'MLpZDiEXM4VsUryR9oE8uc'
>>> shortuuid.decode(s) == u
True
>>> short = s[:7]
>>> short
'MLpZDiE'
>>> h = shortuuid.decode(short)
UUID('00000000-0000-0000-0000-009a5b27f8b9')
>>> shortuuid.decode(shortuuid.encode(h)) == h
True
基于类的使用
如果您需要每个线程有不同的字符集,您可以使用 ShortUUID
类,如下所示
>>> su = shortuuid.ShortUUID(alphabet="01345678")
>>> su.uuid()
'034636353306816784480643806546503818874456'
>>> su.get_alphabet()
'01345678'
>>> su.set_alphabet("21345687654123456")
>>> su.get_alphabet()
'12345678'
命令行使用
shortuuid
提供了一种简单的方法,在终端中生成短 UUID
$ shortuuid
fZpeF6gcskHbSpTgpQCkcJ
Django 字段
shortuuid
包含一个 Django 字段,默认情况下生成随机的短 UUID,方便您使用
from shortuuid.django_fields import ShortUUIDField
class MyModel(models.Model):
# A primary key ID of length 16 and a short alphabet.
id = ShortUUIDField(
length=16,
max_length=40,
prefix="id_",
alphabet="abcdefg1234",
primary_key=True,
)
# A short UUID of length 22 and the default alphabet.
api_key = ShortUUIDField()
该字段与 CharField
相同,带有 length
参数(ID 的长度)、alphabet
参数和 default
参数被移除。其他所有内容都完全相同,例如 index
、help_text
、max_length
等。
兼容性说明
ShortUUID 1.0.0 之前的版本生成的 UUID 以其 MSB 为尾,即反向。后来修复了这个问题,但如果您有一些以旧方法存储为字符串的 UUID,则在将字符串转换回 UUID 时需要将 legacy=True
传递给 decode()
。
该选项将在未来消失,因此您需要将 UUID 转换为字符串使用新方法。这可以通过以下方式完成
>>> new_uuid_str = encode(decode(old_uuid_str, legacy=True))
许可证
shortuuid
在 BSD 许可证下分发。
项目详情
下载文件
下载适合您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装包 的信息。
源分布
构建分布
shortuuid-1.0.13.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 3bb9cf07f606260584b1df46399c0b87dd84773e7b25912b7e391e30797c5e72 |
|
MD5 | 9b7e8ede6f354eb12e9fbccadba635f0 |
|
BLAKE2b-256 | 8ce2bcf761f3bff95856203f9559baf3741c416071dd200c0fc19fad7f078f86 |