fre*_*ley 5 django django-authentication
我正在使用django提供的默认更改密码机制.
我正在使用post_change_redirect提交的表单直接返回我的设置页面,但是我想显示一条消息,向用户保证操作已成功.如何通过密码更改成功检测我是否到达设置视图,并为此添加消息?
小智 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)
Run Code Online (Sandbox Code Playgroud)
希望这个password_change视图将来会以类为基础,允许相同的行为,甚至更少的样板.
| 归档时间: |
|
| 查看次数: |
4030 次 |
| 最近记录: |