首页 > 解决方案 > 如何在 Django 中更改密码

问题描述

我想在不使用默认视图的情况下更改 Django 密码。我通过了PasswordChangeForm视图,但我不知道如何发布它。

class UpdateUserView(UpdateView):
    model = User
    template_name = 'test.html'
    form_class = UserUpdateForm
    success_url = '/'

    def get_context_data(self, *args, **kwargs):
        data = super().get_context_data(**kwargs)
        data['PasswordChangeForm'] = PasswordChangeForm(self.request.user)
        return data

    def post(self, request, *args, **kwargs):
        change_pw = User(password=request.POST.get('id_new_password1'))
        change_pw.save()

    def get_object(self):
        return self.request.user

标签: djangodjango-views

解决方案


您可以使用set_password()更改密码:

>>> from django.contrib.auth.models import User
>>> u = User.objects.get(username='john')
>>> u.set_password('new password')
>>> u.save()

在您看来:

...

def post(self, request, *args, **kwargs):
    user = self.request.user
    user.set_password(request.POST.get('id_new_password1'))
    user.save()
    return super().post(request, *args, **kwargs)

...

post()我会使用方法而不是form_valid()方法:

def form_valid(self,form):
    user = self.object
    user.set_password(form.cleaned_data.get("id_new_password1"))
    user.save()
    return super().form_valid(form)

推荐阅读