2020-05-27--Django项目14--修改密码
2020-05-27 本文已影响0人
program_white
修改密码
修改密码使用ajax请求,找到修改密码按钮的位置:
在script中编写ajax请求:
{% block custom_js %}
<script>
$(function () {
//个人资料修改密码
$('#jsUserResetPwd').on('click', function () {
Dml.fun.showDialog('#jsResetDialog', '#jsResetPwdTips');
});
$('#jsResetPwdBtn').click(function () {
$.ajax({
cache: false,
type: "POST",
dataType: 'json',
url: '{% url 'users:update_pwd' %}',
data: $('#jsResetPwdForm').serialize(),
async: true,
success: function (data) {
if (data.password1) {
Dml.fun.showValidateError($("#pwd"), data.password1);
} else if (data.password2) {
Dml.fun.showValidateError($("#repwd"), data.password2);
} else if (data.__all__) {
Dml.fun.showValidateError($("#repwd"), data.__all__);
} else if (data.status == "success") {
Dml.fun.showTipsDialog({
title: '提交成功',
h2: '修改密码成功,请重新登录!',
});
Dml.fun.winReload();
} else if (data.msg) {
Dml.fun.showValidateError($("#pwd"), data.msg);
Dml.fun.showValidateError($("#repwd"), data.msg);
}
}
});
});
});
</script>
{% endblock %}
请求地址:users/update_pwd/
传递的data:表单中的密码。
在后台使用form表单进行验证:
在users/form.py:
#修改密码
class UpdatePwdForm(forms.Form):
password1 = forms.CharField(required=True,min_length=5) #password1---是表单中name属性值
password2 = forms.CharField(required=True, min_length=5)
def clean(self):
#获取填写的密码
pwd1 = self.cleaned_data['password1'] #[名称是表单中的name属性值]
pwd2 = self.cleaned_data['password2']
#判断两次的密码是否一致
if pwd1 != pwd2:
raise forms.ValidationError('两次密码不一致')
return self.cleaned_data
注意其中的字段必须为前台表单的name属性值:
在clean方法中判断密码是否一致,如果不一致,那么直接抛出密码不一致的信息,最后返回self.cleaned_data
在views.py中进行操作:
users/views.py:
#修改密码
class UpdatePwdView(LoginRequiredMixin,View):
login_url ='/login/'
def post(self,request,*args,**kwargs):
pwd_form = UpdatePwdForm(request.POST) #实例化表单验证
if pwd_form.is_valid():
pwd = request.POST.get('password1') #根据name属性获取前台传过来的值
user = request.user #获取当前用户
user.set_password(pwd) #自带设置密码的模块
user.save()
return JsonResponse({'status':'success'})
else:
return JsonResponse(pwd_form.errors)
分析:当前页面需要进行登陆验证,在post方法中实例化表单验证类,如果该表单验证类对象合法,那么使用request.POST.get获取到前台的表单信息(password1/password2都可以,因为在表单验证类中已经判断是否一致了),获取当前对象,使用django自带认证的user.set_password(获取到的密码)设置密码,保存,返回成功信息,如果不合法,就返回表单验证类对象的errors属性。
最后编写url:
users/urls.py:
#修改密码
url(r'^update_pwd/$',UpdatePwdView.as_view(),name='update_pwd'),
运行:
修改密码:
点击提交:
重新填写密码:
立即登录:
如果两次密码不一致: