Django 如何在Python中创建8位唯一ID?

Django 如何在Python中创建8位唯一ID?,django,python-3.x,uuid,Django,Python 3.x,Uuid,我正在制作一个用于实践的web应用程序,它是一个工作门户。我想为最终用户可见的作业创建8位唯一ID。ID可以有数字和字母。图案必须为8位,不带连字符或破折号,如XXXXXXXX 我知道python中有UUID的东西。但它们似乎以特定的格式生成id。有没有办法以我要求的格式获取id?如果没有,请有人指导我怎么做 我知道也有类似的线索;但它并没有具体回答我的问题。它没有回答我想要达到的目标 提前谢谢。你可以用 或者Django还有一个helper函数,它接受两个参数length(默认值=12)和al

我正在制作一个用于实践的web应用程序,它是一个工作门户。我想为最终用户可见的作业创建8位唯一ID。ID可以有数字和字母。图案必须为8位,不带连字符或破折号,如XXXXXXXX

我知道python中有UUID的东西。但它们似乎以特定的格式生成id。有没有办法以我要求的格式获取id?如果没有,请有人指导我怎么做

我知道也有类似的线索;但它并没有具体回答我的问题。它没有回答我想要达到的目标

提前谢谢。

你可以用

或者Django还有一个helper函数,它接受两个参数
length
(默认值=12)和
allowed\u chars

from django.utils.crypto import get_random_string
get_random_string(8)

使用
os.uradom
对数据进行编码

In [1]: import os

In [2]: import base64

In [3]: base64.b64encode(os.urandom(6)).decode('ascii')
Out[3]: '6Amtry80'

TLDR:用于在顺序整数和随机字符串之间进行一对一转换

如果您正在创建web应用程序,并且需要将字符串id(如
'x4ua9fam'
)映射到数据库中的某个条目,那么您需要一种健壮的一对一方法,在整数和字符串id之间来回转换


您可以将下一个可用的顺序整数
(0,1,2,…)
分配给每个新项目,并使用
将其编码为唯一的字符串,而不是每次生成一个随机id并检查是否已获取。当用户请求字符串时,您可以
将其解码成整数并获取您的数据。

无耻的插件:使用我的优惠券代码生成器,尽可能重复可能值得一提的是,uuid4中只有字母字符a-f。Django的helper函数是一个更好的选择。使用
.lower()
会产生偏差,因为现在小写字母出现的可能性是数字的两倍。如果您只需要小写+数字,那么最好使用
allowed_chars
参数。Django helper函数实现了我想要的技巧。谢谢。@knbk我现在已经从答案中删除了它。谢谢
In [1]: import os

In [2]: import base64

In [3]: base64.b64encode(os.urandom(6)).decode('ascii')
Out[3]: '6Amtry80'