重置 密码这这功能。 我是没有在,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})

完成。  都是已经记录过的知识点。

 

posted on 2019-04-22 15:13  rookiehbboy  阅读(493)  评论(0编辑  收藏  举报