重置 密码这这功能。 我是没有在,stark组件中。 内置的。
所以需要,自己进行定制。
也就只是,在已有的增删改查的基础上,再增加一条url 和相对应的 视图函数。
好的是, 我已经预留了,增加的接口:
class UserInfoHandler(StartHandler): def display_reset_pwd(self, obj=None, is_header=None):
if is_header:
return "重置密码"
# return mark_safe("<a href='#'>重置密码</a>" % self.memory_url(get_url_name=self.get_del_url_name, pk=obj.pk))
return mark_safe("<a href='#'>重置密码</a>") list_display = ["name", "nickname", "age", get_choice_text("性别", "gender"), "telephone", "email", "depart", "roles",
display_reset_pwd] def reset_password(self, request, pk):
pass def extra_url(self):
'''在现有的url基础上 再增加一个url。 但是视图函数需要自己写了'''
partterns = [
re_path(r"reset/pwd(?P<pk>\d+)/$", self.wrapper(self.reset_password), name=self.get_url_name("reset_pwd")),
]
return partterns
在展示的页面上。 新增一个 重置密码的按钮。 写个函数就好了。display_reset_pwd(self, obj=None, is_header=None): 然后添加到list_display 列表中。
重写 extra_url 方法。 增加一条url的线路。 视图函数自己在写一个就好了。 然后是 这条url 的别名 name=self.get_url_name("reset_pwd") 自己看着来别重复就好
到这里已经增加了url:
最下面的一条, 就是刚刚增加的 那条url:
最后的任务, 就是 写上视图函数, 并且。为重置密码按钮, 添加上 href 属性就可以了:
def display_reset_pwd(self, obj=None, is_header=None):
if is_header:
return "重置密码"
rest_url = self.memory_url(get_url_name=self.get_url_name("reset_pwd"), pk=obj.pk)
return mark_safe("<a href='%s'>重置密码</a>" % rest_url)
用内置的, memory_url 就可以了! 传入的参数,除了 当期那field 对象的id 还有就是。 当前url 的别名。 get_url_name("reset_pwd") 就可以获取到
然后就是视图的问题。:
需要,一个 form 组件。
class ResetPassword(StarkForm):
password = forms.CharField(label="密码", widget=forms.PasswordInput)
confirm_password = forms.CharField(label="确认密码", widget=forms.PasswordInput) def clean_confirm_password(self):
password = self.cleaned_data.get("password")
confirm_password = self.cleaned_data.get("confirm_password")
if password and confirm_password:
if password != confirm_password:
raise ValidationError("两次密码输入不一致")
return confirm_password def clean(self):
'''对密码进行加密, 可以在clean 里面来做。'''
password = self.cleaned_data["password"]
self.cleaned_data["password"] = pwdmd5.creatr_md5(password)
return self.cleaned_data
ok: 视图
def reset_password(self, request, pk):
'''重置密码的视图函数'''
userinfo_obj = models.UserInfo.objects.filter(pk=pk).first()
if not userinfo_obj:
return HttpResponse("用户不存在,无法重置密码")
if request.method == "POST":
form = ResetPassword(request.POST)
if form.is_valid():
userinfo_obj.password = form.cleaned_data["password"] # 为userinfo_obj的password重新赋值
userinfo_obj.save() # 然后保存
return redirect(self.memory_reverse(get_url_name=self.get_list_url_name))
return render(request, "stark/change.html", {"form": form})
form = ResetPassword()
return render(request, "stark/change.html", {"form": form})
完成。 都是已经记录过的知识点。