[英]Check Password Validity (Django/Python)
我有一個非常小的Django應用,主要用於學習目的。 我正在使用Django提供的內置用戶模型。 要學習該功能,我創建了一些頁面,這些頁面使我可以創建和編輯用戶,而無需轉到管理面板。
注冊頁面使我可以非常輕松地檢查密碼和電子郵件的有效性,因為當我發布到視圖時,我只需使用user_form.is_valid()
來檢查字段是否正確(用戶名少於30個字符,密碼少於128,其他條件...)。
對於我的編輯頁面,我想使內容更具響應性,因此我通過JQuery使用了AJAX請求,從而使我無需重新加載頁面即可執行操作。 這很好用,但是確實給我帶來了檢查有效性的問題,因為我沒有發送表單,我只是使用Javascript來挑選查詢並將它們發送到AJAX請求中,如下所示:
$.get('/dms/edit_user_changeuser/', {inputNameSend : $("#inputname").val(), usernameToSend : $("#usernameID").val(), emailToSend : $("#emailID").val(),passwordToSend : $("#passwordID").val(), disabledToSend : checkedVal}, function(data){
if(data != "success"){
$("#errorDisplay").show();
}else{
$("#savedDisplay").show();
$("#user_form").hide();
}
});
這是關聯的View處理它的方式:
@login_required
def user_edit_changeuser(request):
# Like before, get the request's context.
context = RequestContext(request)
inputname = request.GET['inputNameSend']
newUsername = request.GET['usernameToSend']
newEmail = request.GET['emailToSend']
newPassword = request.GET['passwordToSend']
if(request.GET['disabledToSend'] == "true"):
disabledBool = False
else:
disabledBool = True
try:
user_obj = User.objects.get(username=inputname)
print("retUser")
user_obj.username = newUsername
user_obj.email = newEmail
user_obj.is_active = disabledBool
user_obj.set_password(newPassword)
user_obj.save()
print(str(disabledBool))
return HttpResponse("success")
except Exception, e:
return HttpResponse(str(e))
假設輸入有效,所有這些工作正常,但是是否有類似User.checkValidPassword(newPassword)
來手動檢查有效性?
User
實例具有check_password
方法,該方法完全可以實現您想要的功能
user = User.object.get(username=inputname)
user.checK_password('a_password')
上面檢查了當前用戶密碼是否與數據庫中保存的密碼匹配。 如果您要詢問有關驗證以確保newPassword
有效,即。 是正確的長度,包含數字,等等。沒有理由不能使用表單來驗證用戶輸入,就像它不是基於AJAX的視圖一樣
作為附帶說明,捕獲python中的所有異常不一定是最好的事情。 它可以掩蓋您想看到的各種錯誤!
如果您期望某個用戶可能不存在,請明確執行此操作。
try:
user = User.object.get(username=inputname)
except User.DoesNotExist:
# all other expections will not be caught!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.