5

django が提供するデフォルトのパスワード変更メカニズムを使用しています。

送信されたフォームを設定ページに直接戻すために使用post_change_redirectしていますが、操作が成功したことをユーザーに安心させるメッセージを表示したいと思います。パスワードが正常に変更された結果として設定ビューにアクセスしているかどうかを検出し、その旨のメッセージを追加するにはどうすればよいですか?

4

2 に答える 2

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)

うまくいけば、password_changeビューは将来的にクラスベースになり、より少ないボイラープレートで同じ動作が可能になります。

于 2013-06-03T11:10:35.083 に答える