私の場合は電子メールで値に署名しなければならず、署名された値をDjango CharField。 私はdjango.core.signingモジュールのSigner.signメソッドを使用しています。 dbフィールドのmax_lengthパラメータも挿入したいので、私はmax_lengthに入れることができる最小値を常にdbに格納するために問題になります。Signerオブジェクト(django.core.signing)のsignメソッドの出力を格納するDjango CharFieldの最小max_length
0
A
答えて
0
これはDjango docsに記載されています。
from django.core.signing import Signer
>>> signer = Signer()
>>> value = signer.sign('My string')
>>> value
'My string:GdMGD6HNQ_qdgxYP8yBZAdAIV1w'
符号文字列が(「:」を含む)28の長さであるプラス私はあなたがDjangoのTextField代わりのCharFieldです
1
を使用することをお勧めメールstring.toの長さは安全側に実際に署名トークン長さは、入力された値で成長する:
>>> 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_length
の属性が282
(254
+ 27
+セパレータの場合は)である必要があります。
+1
署名はHMACとSHA-1をハッシュ関数として使用し、base64で出力を符号化し、base64出力からパディング文字 '= 'を取り除きます。 SHA-1の出力は20バイト、base64は長さを33%増加させるので、テストで見つかった最大27バイトが正しいです。 – knbk
関連する問題
- 1. Django - CharField TextInputのmax_lengthエラーメッセージを変更する
- 2. Django - セッションにオブジェクトを格納する
- 3. 最大長のDjango CharField
- 4. 出力を格納する方法は、オブジェクトに格納するだけです。
- 5. 最小差分を表示する値のユーザー入力を格納する
- 6. Rのループ:データフレームの出力を格納
- 7. rにpcrオブジェクトのサマリ出力を格納
- 8. LibPNG:9ビットグレースケールイメージを格納するための最小の方法
- 9. System.currentTimeMillis()の出力をmysqlに格納
- 10. Python PEP8モジュールの出力を格納
- 11. 非ユニコードデータを格納するDjango
- 12. Django CharFieldの制限
- 13. 複数の選択値をdjangoに格納する
- 14. Djangoで辞書にオブジェクトを格納する
- 15. JSONフィードの最後のオブジェクトのみを格納するコアデータ
- 16. DOM - 値の格納と出力?
- 17. Python:オブジェクトを2次元配列に格納し、そのメソッドを呼び出す
- 18. ファイル出力を変数に格納
- 19. ラケット:プログラムの最後にバイトを格納してから出力する
- 20. MongoさんとDjangoを使って作業していますCharFieldのmax_length問題
- 21. CharFieldですが、別のCharFieldですDjangoのフォーム検証
- 22. 小さな小数の格納MySQL
- 23. ForEachの出力をpowershellの配列に格納する
- 24. Django CharField vs TextField
- 25. MAX_LENGTH
- 26. 分割Djangoの入力フィールドとレコードの別の行に格納
- 27. Linuxシェルの出力を読み込んでJSONオブジェクトに格納します
- 28. Djangoプロキシモデルの追加モデル.CharField
- 29. データベースの列にオブジェクトを格納する
- 30. オブジェクトのリストを格納する
'max_length'には制限がありません。唯一の制限は、MySQLインデックスの最大長が767バイトであることです。つまり、キャラクターごとに3バイトを使用する文字セットを持つCharFieldでインデックスまたはユニーク制約を使用する場合、_then_は255です異なるデータベースを使用する場合やインデックスを使用しない場合は、最大長に制限はありません(ただし、行のサイズなど)。 – knbk
訂正していただきありがとうございます。 – badiya