1、確認密碼
1.1類
class AdminModelsForm(BootStrapModelForm):
'''管理員'''
confirm_password = forms.CharField(
label="確認密碼",
widget=forms.PasswordInput(render_value=True)
)
class Meta:
model = models.Admin
fields = ["username", "password", "confirm_password"]
widgets = {
# render_value=True輸入不一致密碼後,不清空輸入框的密碼
"password": forms.PasswordInput(render_value=True),
}
1.2鈎子函數驗證密碼是否一致
clean_表單名
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
2、添加管理員
def admin_add(request):
'''添加管理員'''
title = "新建管理員"
if request.method == "GET":
form = AdminModelsForm()
return render(request, "change.html", {"form": form, "title": title})
form = AdminModelsForm(data=request.POST)
if form.is_valid():
# print(form.cleaned_data)
form.save()
return redirect("/admin/list")
return render(request, "change.html", {"form": form, "title": title})
3、重置密碼
def admin_reset(request, nid):
'''重置管理員密碼'''
row_object = models.Admin.objects.filter(id=nid).first()
if not row_object:
return redirect("/admin/list")
title = "重置管理員密碼-{}".format(row_object.username)
if request.method == "GET":
form = AdminResetModelsForm()
return render(request, "change.html", {"form": form, "title": title})
form = AdminResetModelsForm(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})
4、MD5加密密碼
#加密函數
from django.conf import settings
import hashlib
def md5(data_string):
salt = settings.SECRET_KEY
obj = hashlib.md5(salt.encode('utf-8'))
obj.update(data_string.encode('utf-8'))
return obj.hexdigest()
#針對加密密碼進行驗證
class AdminResetModelsForm(BootStrapModelForm):
'''重置管理員密碼ModelForm'''
confirm_password = forms.CharField(
label="確認密碼",
widget=forms.PasswordInput(render_value=True)
)
class Meta:
model = models.Admin
fields = ["password",'confirm_password']
widgets = {
# render_value=True輸入不一致密碼後,不清空輸入框的密碼
"password": forms.PasswordInput(render_value=True),
}
def clean_password(self):
'''passowrd勾子函數'''
pwd = self.cleaned_data.get("password")
md5_pwd = md5(pwd)
exists = models.Admin.objects.filter(id=self.instance.pk, password=md5_pwd).exists()
#self.intance.pk獲取admin_reset中待重置行的管理員ID
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