django が提供するデフォルトのパスワード変更メカニズムを使用しています。
送信されたフォームを設定ページに直接戻すために使用post_change_redirect
していますが、操作が成功したことをユーザーに安心させるメッセージを表示したいと思います。パスワードが正常に変更された結果として設定ビューにアクセスしているかどうかを検出し、その旨のメッセージを追加するにはどうすればよいですか?
django が提供するデフォルトのパスワード変更メカニズムを使用しています。
送信されたフォームを設定ページに直接戻すために使用post_change_redirect
していますが、操作が成功したことをユーザーに安心させるメッセージを表示したいと思います。パスワードが正常に変更された結果として設定ビューにアクセスしているかどうかを検出し、その旨のメッセージを追加するにはどうすればよいですか?
ユーザーがパスワードの変更によって到着したかどうかを設定ビューで確認することはお勧めしません。理想的には、パスワード変更のすべてのロジックが同じ場所に含まれていると思います。これにより、ロジックを見つけやすくなり、設定ビューでパスワード変更ビューを認識する必要がなくなります (したがって、ロジックを簡単に変更して、ユーザーを別の場所にリダイレクトできます)。
最善の策は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)
うまくいけば、password_change
ビューは将来的にクラスベースになり、より少ないボイラープレートで同じ動作が可能になります。