當我嘗試在 django 中更新用戶密碼時遇到問題。
def password(request):
if request.method=="POST":
password =request.user.password
username=request.user.username
c_password=request.POST["current_password"]
new_password=request.POST["new_password"]
r_new_password=request.POST["retype_new_password"]
if password==c_password:
if new_password==r_new_password:
user =User.objects.get(username=username)
user.set_password(new_password)
user.save()
messages.info(request,"Successfully saved")
else:
messages.info(request,"PASSWORD DOES NOT MATCH")
else:
messages.info(request,"PASSWORD INCORRECT")
return render(request,"security.html")
當我填寫當前密碼時,它給我錯誤密碼不正確。但是,當我填寫pbkdf2_sha256$320000$Cb4s4nwqKwirdgo50ZdjLH$aeuSP3X dSZXsv0XJB0XxkpwfsmU PedMX9Jl50Zark= 時,我的密碼變得正確并且用戶密碼是可更新的。我的問題是我想將當前密碼欄位填寫為正常的當前密碼而不會出現錯誤。
uj5u.com熱心網友回復:
您使用[Django-doc]驗證密碼:這將檢索散列演算法和鹽,并檢查散列是否匹配,因此您可以使用:authenticate(…)
def password(request):
if request.method == 'POST':
c_password = request.POST['current_password']
new_password = request.POST['new_password']
r_new_password = request.POST['retype_new_password']
user = authenticate(username=request.user.username, password=c_password)
if user is not None:
if new_password == r_new_password:
user.set_password(new_password)
user.save()
messages.info(request, 'Successfully saved')
else:
messages.info(request, 'PASSWORDS DOE NOT MATCH')
else:
messages.info(request, 'PASSWORD INCORRECT')
return render(request, 'security.html')
然而,有一個[Django-doc]可以更改密碼:這已經實作了邏輯并使用了一個表單。您可以注入不同的模板,例如:PasswordChangeView
path(
'password/change/',
PasswordChangeView.as_view(template_name='security.html'),
name='password_change'
)
注意:如果 POST 請求成功,您應該制作一個[Django-doc] 來實作Post/Redirect/Get模式 [wiki]。這樣可以避免在用戶重繪 瀏覽器時發出相同的 POST 請求。
redirect
注意:您可以使用
@login_required裝飾器 [Django-doc]將視圖限制為經過身份驗證的用戶的視圖 。
注意:最好使用[Django-doc] ,而不是手動驗證和清理資料。A不僅可以簡化HTML 表單的呈現,還可以更方便地驗證輸入,并將資料清理為更方便的型別。
FormForm
uj5u.com熱心網友回復:
請參閱檔案Django 不在用戶模型
使用authenticate函式上存盤原始(純文本)密碼,而不是使用if password==c_password:.
from django.contrib.auth import authenticate
def password(request):
if request.method=="POST":
password =request.user.password
username=request.user.username
c_password=request.POST["current_password"]
new_password=request.POST["new_password"]
r_new_password=request.POST["retype_new_password"]
user = authenticate(username=username, password=c_password)
if user is not None:
if new_password==r_new_password:
user =User.objects.get(username=username)
user.set_password(new_password)
user.save()
messages.info(request,"Successfully saved")
else:
messages.info(request,"PASSWORD DOES NOT MATCH")
else:
messages.info(request,"PASSWORD INCORRECT")
return render(request,"security.html")
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/460638.html
標籤:django 验证 django模型 django-views 用户输入
