Django:如何更改其他用户的密码

时间:2019-07-05 01:25:00

标签: django django-forms django-views

我正在用Django构建网站。
我正在此站点中设置一些身份验证,例如站点管理器,组管理器和普通用户。
当系统管理员或组管理员登录时,他们可以更改普通用户的密码,作为系统管理的一部分。
在django中,PasswordChangeForm或SetPasswordForm提供一些用户密码更改形式。我认为这些表格是用于更改用户自己的密码的。
是的,我也需要。但是我还需要更改其他用户(如django管理站点)的密码的形式。 如何构造表格?

我阅读了django管理站点的代码。
我找到了AdminPasswordChangeForm,可以使用此类吗?

forms.py

class MyAdminPasswordChangeForm(AdminPasswordChangeForm):
    def __init__(self, user, *args, **kwargs):
        self.user = user
        super().__init__(user, *args, **kwargs)
        for field in self.fields.values():
            field.widget.attrs['class'] = 'form-control'
views.py

class PasswordChange(PasswordChangeView):
    form_class = MyAdminPasswordChangeForm
    success_url = reverse_lazy('password_change_done')
    template_name = 'accounts/password_change/password_admin_change.html'

    def get(self, request, *args, **kwargs):
        if 'user_id' in self.request.session:
            user = User.objects.get(id=self.request.session['user_id'])
            form_class = self.get_form_class()
            form = form_class(user=user)

        return self.render_to_response(self.get_context_data())

    def get_form_class(self):
        return self.form_class

1 个答案:

答案 0 :(得分:2)

您可以使用set_password()更改用户密码 首先,您应该选择具有此类代码的用户

user=User.objects.get(username=username)

然后您可以设置密码

user.set_password(password)
user.save()