我有一个非常小的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)
这样的手动检查有效性吗?
答案 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!