实现用户密码的重置(不能设置和以前相同的密码)

本文介绍了如何在Django中创建一个处理管理员密码重置的表单,涉及URL配置、类定义(包含密码验证)和视图函数的编写。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、设置url

path('admain/<int:nid>/reset/',admain.admain_reset)

2、设置类

class AdmainResetModelForm(BootStrapModelForm):
    confirm_password = forms.CharField(
        label="确认密码",
        # 不删除里面的内容
        widget=forms.PasswordInput(render_value=True)
    )

    class Meta:
        model = models.Admin
        fields = [ "password", "confirm_password"]
        widgets = {
            "password": forms.PasswordInput(render_value=True)
        }
    def clean_password(self):
        pwd = self.cleaned_data.get("password")
        md5_pwd=md5(pwd)
        exists=models.Admin.objects.filter(id=self.instance.pk,password=md5_pwd).exists()
        if exists:
            raise ValidationError("不能和以前的密码一致")
        return md5(pwd)

    # 钩子函数
    def clean_confirm_password(self):
        pwd = self.cleaned_data.get("password")
        confirm = md5(self.cleaned_data.get("confirm_password"))
        if confirm != pwd:
            raise ValidationError("密码不一致")
        return confirm

3、视图函数

def admain_reset(request,nid):
    row_object=models.Admin.objects.filter(id=nid).first()
    if not row_object:
        return redirect('/admain/list')
    title="重置密码-{}".format(row_object.username)

    if request.method=="GET":
        form=AdmainResetModelForm()
        return render(request,"add.html",{"form":form,"title":title})

    form=AdmainResetModelForm(data=request.POST,instance=row_object)
    if form.is_valid():
        form.save()
        return redirect("/admain/list/")
    return render(request,"add.html",{"form":form,"title":title})

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值