gpt4 book ai didi

django - 将基于函数的 View 转换为只有表单而没有模型(对象)的基于类的 View

转载 作者:行者123 更新时间:2023-12-01 01:21:18 25 4
gpt4 key购买 nike

现在,这就是在用户配置文件中更改密码的方式。知道不涉及模型,将其转换为基于类的 View 的最佳方法是什么?

这是更改密码的 View

@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(r'^password/change/$',
profile_change_password,
name='profile_change_password'
),

如您所见,不涉及模型,因为密码将在验证时替换“用户”密码字段。将其转换为基于类的 View 的任何简单方法?有关系吗?

最佳答案

不需要涉及模型——你可以使用 FormView .它看起来像这样:

from django.core.urlresolvers import reverse
from django.utils.decorators import method_decorator
from django.contrib.auth.decorators import login_required
from django.views.generic.edit import FormView

from myapp.forms import PasswordChangeFormPrivate

class ProfileChangePassword(FormView):
form_class = PasswordChangeFormPrivate
success_url = reverse('profile_view_details')
template_name = 'profiles/profile_change_password.html'

def get_form_kwargs(self):
kwargs = super(ProfileChangePassword, self).get_form_kwargs()
kwargs['user'] = self.request.user
return kwargs

def form_valid(self, form):
form.save()
messages.add_message(self.request, messages.INFO, _('profile changed'))
return super(ProfileChangePassword, self).form_valid(form)

@method_decorator(login_required)
def dispatch(self, *args, **kwargs):
return super(ProfileChangePassword, self).dispatch(*args, **kwargs)

我不确定你为什么有
user = get_object_or_404(User, username__iexact=request.user.username)

无论如何,您都需要登录表单,所以 request.user保证是有效用户。

关于django - 将基于函数的 View 转换为只有表单而没有模型(对象)的基于类的 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9046659/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com