我使用的是由django提供的default change password mechanism。密碼更改後顯示消息?
我正在使用post_change_redirect
將提交的表單直接回到我的設置頁面,但是我想顯示一條消息以確保用戶操作已成功。如何通過成功更改密碼來檢測我是否到達設置視圖,並添加一條消息以實現該效果?
我使用的是由django提供的default change password mechanism。密碼更改後顯示消息?
我正在使用post_change_redirect
將提交的表單直接回到我的設置頁面,但是我想顯示一條消息以確保用戶操作已成功。如何通過成功更改密碼來檢測我是否到達設置視圖,並添加一條消息以實現該效果?
我不會推薦在設置視圖中檢查用戶是否通過密碼更改到達。我認爲理想情況下,密碼更改的所有邏輯都包含在同一個地方。這樣可以更容易地找到邏輯,並且不需要設置視圖就可以知道密碼更改視圖(因此您可以輕鬆更改邏輯以將用戶重定向到其他位置)。
最好的辦法是根據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
視圖進行類爲基礎的未來,讓用更少的樣板相同的行爲。
[當用戶更改密碼或請求密碼重置時如何得到通知?](http://stackoverflow.com/questions/9132712/how-to-get-notified-when-a-user-更改密碼或請求密碼重置) – Alasdair
看看這個[Django消息](https://docs.djangoproject.com/en/1.4/ref/contrib/messages/) – PepperoniPizza