密码更改后显示消息?

fre*_*ley 5 django django-authentication

我正在使用django提供的默认更改密码机制.

我正在使用post_change_redirect提交的表单直接返回我的设置页面,但是我想显示一条消息,向用户保证操作已成功.如何通过密码更改成功检测我是否到达设置视图,并为此添加消息?

小智 7

我不建议在设置视图中检查用户是否通过密码更改到达.我认为理想情况下,密码更改的所有逻辑都包含在同一个地方.这样可以更容易地找到逻辑,并且不需要设置视图来了解密码更改视图(因此您可以轻松更改逻辑以将用户重定向到其他位置).

您最好的选择是基于PasswordChangeForm而不是使用内置视图来编写自己的password_change视图.使用此方法,您可以使用消息框架显示成功消息.(您还必须启用消息框架并将其标记放在视图中.)

例如,如果您想显示一条简单的消息并重定向回您指定的URL模式'settings',您可以编写一个这样的视图:

from django.contrib import messages
from django.contrib.auth.forms import PasswordChangeForm
from django.core.urlresolvers import reverse_lazy
from django.views.generic import FormView


class PasswordChangeView(FormView):
    template_name = 'registration/password_change_form.html'
    form_class = PasswordChangeForm
    success_url = reverse_lazy('settings')

    def get_form_kwargs(self):
        kwargs = super(PasswordChangeView, self).get_form_kwargs()
        kwargs['user'] = self.request.user
        return kwargs

    def form_valid(self, form):
        form.save()
        messages.success(self.request, "Your password has been changed.")
        return super(FormView, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)

希望这个password_change视图将来会以类为基础,允许相同的行为,甚至更少的样板.