Flaskのエラー「TypeError.Flask」を解決する。ユニコードオブジェクトはハッシュ化する前にエンコードする必要があります"
2022-01-21 15:59:20
タグ Python フラスコ
[参考リンク
python version pit:md5 example (python2とpython3でのmd5の違い)
Pythonでhashlibを使って中国語の文字列のMD5値を求める
フォロー Flask mega チュートリアルプロジェクトへようこそ! チュートリアルでFlaskを学ぶことができます。 アバターの追加 スクリプトを実行してエラーになったとき。
TypeErrorです。Unicode オブジェクトは、ハッシュ化する前にエンコードする必要があります。
これがユーザーモデルです。
class User(db.Model): id = db.Column(db.Integer, primary_key=True) nickname = db.Column(db.String(64), index=True, unique=True) email = db.Column(db.String(120), index=True, unique=True) posts = db.relationship('Posts', backref='author', lazy='dynamic') about_me = db.Column(db.String(140)) last_seen = db.Column(db.DateTime) @property def is_authenticated(self): return True @property def is_active(self): return True @property def is_anonymous(self): return False def get_id(self): try: return unicode(self.id) # python2 except NameError: return str(self.id) # python 3 def avatar(self, size): # The following line reports an error, and according to the error message, you need to encode before encrypting return 'http://www.gravatar.com/avatar/' + md5(self.email).hexdigest() + '?d=mm&s=' + str(size) def __repr__(self): return '<User %r>' & (self.nickname)
解決策
参考文献によると
コードの違いというのは、python3では文字列をエンコードする必要があり、そうしないとエラーになるということです。これは、暗号化によって文字列をバイトに変換する必要があるためで、3 デフォルトのエンコーディングは utf-8 です。そのため、復号化にはutf-8を使用しています。checkcode = hashlib.md5(pwd).hexdigest() TypeError: Unicode-objects must be encoded before hashing
そこで、このエラーを取ります。
return 'http://www.gravatar.com/avatar/' + md5(self.email).hexdigest() + '?d=mm&s=' + str(size)
に修正します。
return 'http://www.gravatar.com/avatar/' + md5(self.email.encode("latin1")).hexdigest() + '?d=mm&s=' + str(size)
再び正常に動作し、問題は解決しました。
関連
-
ImportError: 必要な依存関係 ['numpy'] がない 解決方法
-
[解決済み] BeautifulSoupとlxml.html - どちらを選ぶか?重複
-
[解決済み] NLTKのPythonコンコーダンスコマンド
-
[解決済み] 基本ファイルが実行されない → デバイスPRNを初期化できない
-
[解決済み] scikit-learn の TfidfVectorizer 。ValueError: np.nan は無効なドキュメントである。
-
[解決済み] 文字列がループを使用して出現する回数を返す
-
[解決済み] テキストファイルのインポート:ファイルから解析される列がない
-
[解決済み] 2つのリスト(お互いを参照している)を全く同じ方法でソートする方法
-
Pythonのリクエストで "Max retries exceeded with url "というエラーが発生する。
-
'datetime.datetime' に 'datetime' という属性がない問題
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】WindowsError: [Error 126] 指定されたモジュールが見つかりません。
-
[解決済み】TypeError: 期待されるキャラクタバッファオブジェクト
-
[解決済み】Flask Value error ビュー関数が応答を返さなかった [重複]。
-
Pythonエラー集です。IndexError: スカラー変数へのインデックスが無効です。
-
Pythonデータマイニングでよく使われるAutoEDA5つのツールのまとめ
-
pycharmでtensorflowを使う方法を教えます。
-
[解決済み] インデックスとして使用する配列は整数型(またはブーリアン型)でなければならない。
-
[解決済み] ValueErrorです。TensorはTensorflowのBidirectinal RNNを持つTensorと同じグラフからでなければならない
-
[解決済み] Tkinterのラベルを変数から更新する
-
python2 Solve TypeError: 'encoding' is invalid keyword argument for this function.