генерировать токен как значение по умолчанию django - PullRequest
0 голосов
/ 13 февраля 2019

Итак, я использую библиотеку python secrets , чтобы я мог генерировать токен, поэтому я хочу добавить его по умолчанию, как это

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

странноон генерирует 43 символа, а не 32, поэтому кто-нибудь может помочь мне понять, почему?

Спасибо

1 Ответ

0 голосов
/ 13 февраля 2019

Этот аргумент 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 является числом байтов , а не символов .Согласно документации это означает примерно 1,3 символа на байт, поэтому 32 * 1,3 = ~ 42.

...