2012-11-14 4 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 messages] (https://docs.djangoproject.com/ko/1.4/ref/contrib/messages/)를보십시오. – PepperoniPizza

답변

6

사용자가 암호 변경을 통해 도착했는지 여부는 설정보기에서 확인하지 않는 것이 좋습니다. 이상적으로는 암호 변경 논리가 모두 같은 위치에 있다고 생각합니다. 이렇게하면 논리를 쉽게 찾을 수 있으며 설정보기에서 암호 변경보기를 알 필요가 없습니다 (논리를 쉽게 변경하여 사용자를 다른 곳으로 리디렉션 할 수 있음).

최상의 방법은 password_change보기를 사용하는 대신 PasswordChangeForm을 기반으로 자신의보기를 작성하는 것입니다. 이 방법을 사용하면 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보기가 될 것이다 더 적은 상용구와 같은 동작을 허용, 미래에 클래스 기반.

관련 문제