2012-11-14 97 views
3

我使用的是由django提供的default change password mechanism密碼更改後顯示消息?

我正在使用post_change_redirect將提交的表單直接回到我的設置頁面,但是我想顯示一條消息以確保用戶操作已成功。如何通過成功更改密碼來檢測我是否到達設置視圖,並添加一條消息以實現該效果?

+0

[當用戶更改密碼或請求密碼重置時如何得到通知?](http://stackoverflow.com/questions/9132712/how-to-get-notified-when-a-user-更改密碼或請求密碼重置) – Alasdair

+0

看看這個[Django消息](https://docs.djangoproject.com/en/1.4/ref/contrib/messages/) – PepperoniPizza

回答

6

我不會推薦在設置視圖中檢查用戶是否通過密碼更改到達。我認爲理想情況下,密碼更改的所有邏輯都包含在同一個地方。這樣可以更容易地找到邏輯,並且不需要設置視圖就可以知道密碼更改視圖(因此您可以輕鬆更改邏輯以將用戶重定向到其他位置)。

最好的辦法是根據PasswordChangeForm編寫自己的視圖,而不是使用內置的password_change視圖。採用這種方法,您可以使用the message framework來顯示成功消息。 (您還必須啓用消息框架並將其標記放入您的視圖中。)

例如,如果要顯示簡單消息並重定向回到名爲'settings'的URL模式,則可以編寫視圖像這樣的:

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) 

但願,password_change視圖進行類爲基礎的未來,讓用更少的樣板相同的行爲。