如何在Django中更改密码
我想在不使用默认视图的情况下更改Django密码。我将如何在Django中更改密码,django,django-views,Django,Django Views,我想在不使用默认视图的情况下更改Django密码。我将PasswordChangeForm传递给视图,但我不知道如何发布它 class UpdateUserView(UpdateView): model = User template_name = 'test.html' form_class = UserUpdateForm success_url = '/' def get_context_data(self, *args, **kwargs):
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
您可以使用以下方法更改密码: 在你看来:
...
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)
...
我将使用form\u valid()
方法代替post()
方法:
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)
您可以使用以下方法更改密码: 在你看来:
...
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)
...
我将使用form\u valid()
方法代替post()
方法:
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)
密码不能像任何其他字段一样更改,因为在保存之前需要对其进行加密。您需要使用处理加密部分的方法 您的代码将如下所示
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):
u = self.request.user
u.set_password(request.POST.get('id_new_password1'))
u.save()
return super().post(request, *args, **kwargs)
def get_object(self):
return self.request.user
密码不能像任何其他字段一样更改,因为在保存之前需要对其进行加密。您需要使用处理加密部分的方法 您的代码将如下所示
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):
u = self.request.user
u.set_password(request.POST.get('id_new_password1'))
u.save()
return super().post(request, *args, **kwargs)
def get_object(self):
return self.request.user
这和我的答案不一样?是的,似乎我们提交的时间几乎完全相同。view users.views.UpdateUserView没有返回HttpResponse对象。它没有返回任何结果。我就是这么想的got@daraq,您的post方法必须返回此
return super().post(请求,*args,**kwargs)
。看看我的答案。我会试试看,顺便说一句,django change password表单有两个字段(id_new_password1和id_new_password2用于确认),我应该得到这两个字段?这和我的答案不一样?是的,看起来我们提交的时间几乎完全相同。view users.views.UpdateUserView没有返回HttpResponse对象。它没有返回任何结果。我就是这么想的got@daraq,您的post方法必须返回此return super().post(请求,*args,**kwargs)
。请看我的答案。我会尝试一下,顺便说一下,django change password表单有两个字段(id_new_password1和id_new_password2用于确认),我应该获得这两个字段吗?