跳转到主要内容

一个用于生成简洁、明确且URL安全的UUID的生成库。

项目描述

描述

shortuuid是一个简单的Python库,用于生成简洁、明确且URL安全的UUID。

通常,需要在用户可以看到的地方使用非连续的ID,但ID必须尽可能简洁和易于使用。shortuuid通过使用Python内置的uuid模块生成uuid,然后将其转换为base57,使用小写和大写字母以及数字,并移除类似字符,如l、1、I、O和0。

image

安装

要安装shortuuid,您需要

  • Python 3.6+

如果您有依赖项,您有多种安装选项

使用方法

要使用shortuuid,只需将其导入到您的项目中,如下所示

>>> import shortuuid

然后您可以生成一个简短的UUID

>>> shortuuid.uuid()
'vytxeTZskVKR7C7WgdSP3d'

如果您想使用版本 5 的 UUID,可以将名称(DNS 或 URL)传递给调用,它将被用作命名空间(uuid.NAMESPACE_DNSuuid.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 参数被移除。其他所有内容都完全相同,例如 indexhelp_textmax_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 (9.7 kB 查看哈希值)

上传时间

构建分布

shortuuid-1.0.13-py3-none-any.whl (10.5 kB 查看哈希值)

上传时间 Python 3

支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面