密码使用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

浙公网安备 33010602011771号