代码之家  ›  专栏  ›  技术社区  ›  copser

生成令牌作为默认值django

  •  0
  • copser  · 技术社区  · 6 年前

    所以我用的是蟒蛇 secrets 库,这样我就可以生成令牌,所以我想将它添加为这样的默认值

    token=models.CharField(max_length=32, default=secrets.token_urlsafe(32))

    奇怪的是,它会生成43个字符而不是32个字符,所以有人能帮我理解为什么吗?

    谢谢

    1 回复  |  直到 6 年前
        1
  •  1
  •   malberts    6 年前

    default 参数必须指向 可赎回的 不是带参数的函数调用(当django启动时只计算一次)。您需要编写自己的包装器函数并引用它。例如:

    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。