2017-04-23 23 views

回答

0

这是他们在Django docs上给出的。

from django.core.signing import Signer 
>>> signer = Signer() 
>>> value = signer.sign('My string') 
>>> value 
'My string:GdMGD6HNQ_qdgxYP8yBZAdAIV1w' 

符号串的长度为28(包括“:”)加上你的电子邮件string.to的长度为安全起见,我建议你使用Django TextField代替CharField

+1

'max_length'没有限制。唯一的限制是MySQL索引的最大长度为767个字节,这意味着如果您对具有字符集的CharField使用索引或唯一约束,每个字符使用3个字节,那么_then_的限制是255 。当使用不同的数据库或没有索引时,最大长度没有限制(但可能存在其他限制,例如一行的大小)。 – knbk

+0

感谢您的更正。 – badiya

1

事实上,签署标记长度增长与输入值:

>>> from django.core.signing import Signer 
>>> signer = Signer() 
>>> signer.sign('a') 
'a:JRYbTbX2xBKZAgJxbzUzsl80vIQ' 

>>> signer.sign('ab') 
'ab:ThbCyQ9bQpAX4vMAmYSEtbtF7Y4' 

>>> signer.sign('abc') 
'abc:4_rTdYDe18bPklTTKYIsJaB9_oM' 

>>> signer.sign('abcd') 
'abcd:RzGFLsNgRv-LQ4lEorvNPjGH5LM' 

>>> signer.sign('abcde') 
'abcde:oOdfJjZ14Jz2F4aHD3pQMBC9fAA' 

>>> signer.sign('abcdefghijkl') 
'abcdefghijkl:Wz1gPy4QS7ZoCyXuKgUFG-ofxpU' 

但是,根据我的测试,令牌的最大尺寸为27。根据这个答案What is the maximum length of a valid email address?电子邮件地址的最大长度是254个字符。 max_lengthTextField的属性应为282254 + 27 + 1为分隔符)。

+1

签名使用HMAC和SHA-1作为哈希函数,然后在base64中对输出进行编码,从base64输出中去除任何填充字符'='。 SHA-1的输出是20个字节,base64将长度增加33%,因此在测试中找到的最大27个字节是正确的。 – knbk