django利用不涉及数据库form自定义表单 表单元素验证

python 复制代码
from django import forms
from django.core.exceptions import ValidationError
class PerCenter(forms.Form):
    old_password = forms.CharField(label="旧密码", widget=forms.PasswordInput(attrs={'name': 'old_password'}))
    new_password = forms.CharField(label="新密码", widget=forms.PasswordInput(attrs={'name': 'new_password'}))
    confirm_password = forms.CharField(label="确认密码", widget=forms.PasswordInput(attrs={'name': 'confirm_password'}))

    def __init__(self, *args, **kwargs):
        self.request = kwargs.pop('request',None)
        super(PerCenter, self).__init__(*args, **kwargs)

    def clean_old_password(self):
        old_password = self.cleaned_data.get('old_password')
        password = admin_app.models.UserInfo.objects.filter(username=self.request.user_name,password=md5(old_password)).first()
        if not password:
            raise ValidationError("旧密码错误")
        return password


    def clean_confirm_password(self):
        new_password = self.cleaned_data.get('new_password')
        confirm_password = self.cleaned_data.get('confirm_password')
        if new_password != confirm_password:
            raise ValidationError("两次密码不一致")
        return md5(confirm_password)




def per_center(request):
    form=PerCenter(request=request)
    context={'form':form,
             }
    return render(request,"index/per_info.html",context)


@csrf_exempt
def modify_per_center(request):
    form = PerCenter(data=request.POST,request=request)
    if form.is_valid():
        print(form.cleaned_data)
        admin_app.models.UserInfo.objects.filter(id=request.session["info"]["id"]).update(password=form.cleaned_data["confirm_password"])
        return JsonResponse({"status":True})

    return JsonResponse({"status" : False , "error" : form.errors})

per_info.html

html 复制代码
  <div class="crm-profile-forms">
                <div>
                    <h2 class="crm-section-title">修改密码</h2>
                    <p class="crm-section-desc">定期更换密码有助于保护账号安全</p>
                </div>

                <form id="per-form-data">
                    {% for item in form %}
                    <div class="crm-form-group">
                        <label>{{ item.label }}</label>
                        {{ item }}
                    <span style="color: red"></span>
                    </div>
                    {% endfor %}



                </form>
            <button class="crm-form-btn" id="confirepwd">
                        保存密码
                    </button>
            </div>



    <script>
        submitPassword();
 

        function submitPassword() {
            $('#confirepwd').click(function () {
               $.ajax({
                url:"/modify/percenter/",
                type:"post",
                data:$("#per-form-data").serialize(),
                dataType:"JSON",
                success: function (res) {
                    alert(res.status)
                    if (res.status){
                        alert("修改成功")
                        //location.reload()
                    }else {
                        $.each(res.error, function (name, date) {
                            $("#id_"+name).next().text(date[0])
                        })
                    }
                }
            })
            })

        }
    </script>
相关推荐
木白CPP1 小时前
Persistence subsystem 笔记
数据库·笔记
广州智造1 小时前
Radioss破坏模型FAILJOHNSON (Johnson-cook) 和 FAILTAB1
运维·数据库·自动化·仿真·建模·后处理·前处理
冰暮流星1 小时前
sql之日期函数
数据库·sql
时间售卖铺1 小时前
MySQL 库表设计:数据库范式详解
运维·数据库·mysql·云原生
忡黑梨1 小时前
PostgreSQL 14 源码编译安装实战:RHEL 8 离线环境从零到可用
数据库·postgresql
ss2731 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 23 PostgreSQL数据库文件系统与数据页结构
数据库·笔记·postgresql
LMT流氓兔1 小时前
第五单元——第10课:用自动化测试验证工具逻辑
数据库·ai·oracle·langchain
小小AK1 小时前
生产入库单同步实战:MySQL 到金蝶云星空的带料委外场景拆解
数据库·mysql
凤凰院凶涛QAQ2 小时前
《MySQL内核拆解:从SQL到InnoDB》(一) : 数据库基础&库操作&数据类型
数据库·sql·mysql