所以我用的是蟒蛇 secrets 库,这样我就可以生成令牌,所以我想将它添加为这样的默认值
token=models.CharField(max_length=32, default=secrets.token_urlsafe(32))
奇怪的是,它会生成43个字符而不是32个字符,所以有人能帮我理解为什么吗?
谢谢
那 default 参数必须指向 可赎回的 不是带参数的函数调用(当django启动时只计算一次)。您需要编写自己的包装器函数并引用它。例如:
default
def my_secret(): return secrets.token_urlsafe(32)[:32] # Return only the first 32 characters. #... token=models.CharField(max_length=32, default=my_secret)
请参阅此答案: https://stackoverflow.com/a/12654998/4082726
关于长度: token_urlsafe 的参数是 字节 不是 文字 . 根据 documentation 这意味着每个字节大约有1.3个字符,所以32*1.3=~42。
token_urlsafe