我在一個專案中使用python和flask創建了一個更新密碼功能。用戶可以通過在表單的第一個輸入欄位中插入他們的當前密碼,在第二個欄位中插入他們的新密碼來更新密碼。問題是,一旦我點擊更新按鈕,我就一直得到上面標題中的錯誤。AttributeError: 'NoneType'物件沒有屬性'encode'
。我在下面插入了我所使用的Python代碼
。@user. route("/update_password/<username>", methods=['GET'/span>, 'POST'/span>])
def update_password(username)。
user = mongo.db.users.find_one({"username"/span>: username})
if request.method == "GET":
return render_template(
"update_password.html", username=username)
if request.method == 'POST'/span>:
update_password = generate_password_hash(
request.form.get('update-password'))
if check_password_hash(
user['password'], request.form.get('existing-password')
):
mongo.db.users.update_one(
{'username': username},
{'$set'/span>: {'password'/span>: updated_password}}。
)
flash("密碼更新成功")
return redirect(url_for("user.profile"/span>, username=user['session'/span>])
else:
flash("密碼不匹配")
return redirect(url_for("user.update_password", username=user['session'])
下面是我在表單中使用的html代碼:
<div class="row"/span>>
<div class="col-lg-8 col-md-10 offset-lg-2 offset-md-1"/span>>
<div class="card">
<div class="card-body text-center">
<h1>更新密碼</h1>
<form method="POST" action="{ url_for('user.update_password', username=username) }}" >
<div class="mb-3"/span>>
<i class="fas fa-lock icon-style"></i>
<標簽 for="existing-password" class="form-label"> Enter your existing password< /label>
< input type="password" name="existing-password" class="form-control" id="existing-password" required>
</div>
<!-- 密碼模式來自w3學校。見貢獻 in ReadMe -->
<div class="mb-3"/span>>
<i class="fas fa-lock icon-style"></i>
<標簽 for="update_password" class="form-label"> 輸入新密碼< /label>。
< input type="password" name="uped_password" class="form-control" id="update_password"
pattern="(?=.*d)(?=.*[a-z])(?=.*[A-Z]).{8,15}"
title="必須包含至少一個數字,一個大寫和小寫字母
字母,以及至少8個或更多的字符"要求>。
</div>
<按鈕 type="submit" class="btn btn-lg register-btn"> Update< /button>
</form>
</div>
</div>
</div>
</div>
當檢查代碼時,似乎我的Python函式在以下一行可能有問題
updated_password = generate_password_hash(request.form.get('uped-password')
如果有人能給我任何關于如何解決這個問題的資訊,我將非常感激
。uj5u.com熱心網友回復:
我假設錯誤是由于欄位名不匹配。在表單中
< input type="password" name="uped_password">
名稱是 updated_password
而在你的路由中:
if request.method == 'POST'/span>:
update_password = generate_password_hash(
request.form.get('update-password'))
你正在訪問
updated-password
這將給你帶來無,因為鍵的名稱是錯誤的
。轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/329832.html
標籤:
下一篇:將注冊頁面重定向到主頁FLASK
