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