2014-01-08 50 views
0

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

注册页面允许我很容易地检查密码和电子邮件有效性等内容,因为当我POST到视图时,我只需使用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)手动检查的有效性?

+0

https://docs.djangoproject.com/en/1.3/topics/auth/#manually-checking-a-user-s-password – dm03514

回答

1

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! 
+1

真棒,这么简单,我几乎得到它的权利与我的猜测在问题的最后。绝对是一个RTFM的例子,但是我的大脑被炸了,无论如何,谢谢你的帮助! :) –