检查密码有效性(Django / Python)

时间:2014-01-08 15:47:21

标签: javascript jquery python ajax django

我有一个非常小的Django应用程序,主要用于学习目的。我正在使用Django提供的内置用户模型。为了学习这些功能,我创建了一些页面,允许我创建和编辑用户,而无需转到管理面板。

注册页面允许我非常轻松地检查密码和电子邮件有效性等内容,因为当我发布到View时,我只需使用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();
            }
});

这就是相关视图处理它的方式:

@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)这样的手动检查有效性吗?

1 个答案:

答案 0 :(得分:1)

User个实例有一个方法check_password,它完全符合您的要求

user = User.object.get(username=inputname)
user.checK_password('a_password')

以上检查当前用户密码是否与db中保存的密码相匹配。如果您反而要求验证以确保newPassword有效,即。是正确的长度,包含数字等。没有理由你不能使用表单来验证用户输入,就像你不是基于AJAX的视图一样


作为旁注,在python中捕获所有异常并不是最好的选择。它可以掩盖你想看到的各种错误!

如果您希望用户可能不存在,请明确地执行此操作。

try:
    user = User.object.get(username=inputname)
except User.DoesNotExist:
    # all other expections will not be caught!