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'),

运行:
修改密码:



点击提交:



重新填写密码:

立即登录:

如果两次密码不一致:


上一篇下一篇

猜你喜欢

热点阅读