Tengo que firmar un valor, en mi caso, correos electrónicos, y tengo que almacenar el valor firmado en Django CharField. Estoy usando el método Signer.sign del módulo django.core.signing. Como me gustaría insertar también el parámetro max_length para el campo db, mi pregunta es cuál sería el valor mínimo que puedo poner en max_length para almacenarlo siempre con éxito en la base de datos.
De hecho, la longitud del token de firma crece con el valor de entrada:
>>> 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' Sin embargo, según mis pruebas, el tamaño máximo del token es 27 . Según esta respuesta , ¿cuál es la longitud máxima de una dirección de correo electrónico válida? la longitud máxima de una dirección de correo electrónico es de 254 caracteres. El atributo max_length de su TextField debe ser 282 ( 254 + 27 + 1 para el separador).
esto es lo que han dado en los documentos de Django .
from django.core.signing import Signer >>> signer = Signer() >>> value = signer.sign('My string') >>> value 'My string:GdMGD6HNQ_qdgxYP8yBZAdAIV1w'la cadena de signos tiene una longitud de 28 (incluido ':') más la longitud de su cadena de correo electrónico. Para estar seguro, le sugiero que use Django TextField en lugar de CharField