4
現在,這是密碼在用戶配置文件中的更改方式。知道沒有涉及模型的情況下,將其轉換爲基於類的視圖的最佳方式是什麼?將基於功能的視圖轉換爲僅基於視圖的基於類的視圖(對象)
這是更改密碼
@login_required
def profile_change_password(request):
"""
Change password of user.
"""
user = get_object_or_404(User, username__iexact=request.user.username)
if request.method == 'POST':
form = PasswordChangeFormPrivate(user=user, data=request.POST)
if form.is_valid():
form.save()
messages.add_message (request, messages.INFO,
_('password changed'))
return HttpResponseRedirect(reverse('profile_view_details'))
else:
form = PasswordChangeFormPrivate(user=request.user)
return render_to_response('profiles/profile_change_password.html',
{ 'form': form,},
context_instance=RequestContext(request)
)
這個視圖是爲更改密碼
class PasswordChangeFormPrivate(PasswordChangeForm):
def __init__(self, *args, **kwargs):
super(PasswordChangeForm, self).__init__(*args, **kwargs)
def clean_new_password2(self):
password1 = self.cleaned_data.get('new_password1')
password2 = self.cleaned_data.get('new_password2')
if password1 and password2:
if password1 != password2:
raise forms.ValidationError(_("The two password fields didn't match."))
min_len = getattr(settings, "PASSWORD_MINIMUM_LENGHT", 6)
if len(password1) < min_len:
raise forms.ValidationError(_("Password too short! minimum length is ")+" [%d]" % min_len)
return password2
這是URL
url(r'^password/change/$',
profile_change_password,
name='profile_change_password'
),
正如你看到沒有模型的形式因爲密碼將在驗證時替換「用戶」密碼字段。任何將此轉換爲基於類的視圖的簡單方法?有關係嗎?
Thx:在什麼時候使用下面的行? kwargs ['user'] = self.request.user – un33k 2012-01-28 20:02:24
'get_form_kwargs'返回實例化時傳遞給表單的關鍵字參數的字典。你這樣做而不是寫'ProfileChangePassword(user = user)' - 稍後,當視圖創建表單時,它會傳遞'user'參數。 – 2012-01-28 20:11:17
很好的解釋,謝謝。 – un33k 2012-02-01 02:35:45