密码使用md5加密+重置密码

一,使用md5加密

 

 

def admin_add(request):
    '''添加管理员'''
    title="新建管理员"

    if request.method=="GET":
        form=AdminModelForm()
        return render(request,'change.html',{'form':form,"title":title})

    #获取提交的数据
    form=AdminModelForm(data=request.POST)
    if form.is_valid():
        form.save()
        return redirect('/admin/list')
    #校验失败
    return render(request,'change.html',{'form':form,"title":title})

 

 

class AdminModelForm(BootStrapModelForm):
    confirm_password=forms.CharField(
        label="确认密码",
        widget=forms.PasswordInput(render_value=True)#render_value=True 提交失败后,不清空输入框的数据
    )
    class Meta:
        model=models.Admin
        fields=["username","password"]
        widgets={
            "password":forms.PasswordInput(render_value=True)  #密码输入框
        }

    #获取密码
    def clean_password(self):
        pwd=self.cleaned_data.get("password")
        return md5(pwd)
    #检验两次输入的密码是否一致
    def clean_confirm_password(self):
        pwd=self.cleaned_data.get("password")
        confirm=md5(self.cleaned_data.get("confirm_password"))
        if pwd!=confirm:
            raise ValidationError("密码不一致")
        #返回什么,此字段以后保存到数据库上就是什么
        return confirm

 

 

from django.conf import settings
import hashlib

#对字符串加密
def md5(data_string):
    obj=hashlib.md5(settings.SECRET_KEY.encode('utf-8'))
    obj.update(data_string.encode('utf-8'))
    return obj.hexdigest()
#  change.html用于add.html

{% extends 'layout.html' %} {% block title %} <title>{{ title }}</title> {% endblock %} {% block content %} <div class="container"> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title"> {{ title }} </h3> </div> <div class="panel-body"> {# novalidate-关闭浏览器校验#} <form method="post" novalidate> {% csrf_token %} {% for field in form %} <div class="form-group"> <label>{{ field.label }}</label> {{ field }} <span style="color: red;">{{ field.errors.0 }}</span> {# <input type="text" class="form-control" placeholder="姓名" name="user"/>#} </div> {% endfor %} <button type="submit" class="btn btn-primary">提 交</button> </form> </div> </div> </div> {% endblock %}

 

二,重置密码

 

 

 

 

 

def admin_reset(request, nid):
    '''重置密码'''
    # 获取对象  对象/None
    row_object = models.Admin.objects.filter(id=nid).first()
    if not row_object:
        # 回到list界面
        return redirect('/admin/list')

    title = "重置密码-{}".format(row_object.username)
    if request.method == "GET":
        form = AdminResetModelForm()
        return render(request, "change.html", {"form": form, "title": title})

        # 获取提交的数据
    form = AdminResetModelForm(data=request.POST, instance=row_object)
    if form.is_valid():
        form.save()
        return redirect('/admin/list')
    # 数据校验失败
    return render(request, 'change.html', {"form": form, "title": title})

 

 

class AdminResetModelForm(BootStrapModelForm):
    confirm_password = forms.CharField(
        label="确认密码",
        widget=forms.PasswordInput(render_value=True)  # 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)
        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 pwd != confirm:
            raise ValidationError("密码不一致")
        # 返回什么,此字段以后保存到数据库上就是什么
        return confirm

 

posted @ 2022-04-12 23:09  shuqi123  阅读(94)  评论(0)    收藏  举报