美文网首页
2020-05-27--Django项目14--修改密码

2020-05-27--Django项目14--修改密码

作者: program_white | 来源:发表于2020-05-27 22:12 被阅读0次

    修改密码

    修改密码使用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'),
    

    运行:
    修改密码:



    点击提交:



    重新填写密码:

    立即登录:

    如果两次密码不一致:


    相关文章

      网友评论

          本文标题:2020-05-27--Django项目14--修改密码

          本文链接:https://www.haomeiwen.com/subject/pcygahtx.html