簡體   English   中英

檢查密碼有效性(Django / Python)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM