我有一个注册表格,我需要当用户注册表自动登录时,我可以通过功能视图获取它,但是当我尝试使用基于类的视图时它不起作用
我的功能视图:
def register(request):
if request.method=="POST":
form = UserCreateForm(request.POST)
if form.is_valid():
new_user = form.save()
new_user = authenticate(username=request.POST['username'],password=request.POST['password1'])
login(request, new_user)
return HttpResponseRedirect("/contadores/index")
else:
form = UserCreateForm()
return render_to_response("contadores/register.html", {
'form': form,
}, context_instance=RequestContext(request))
和我基于班级的观点:
class RegisterView(FormView):
form_class = UserCreateForm
template_name = 'contadores/register.html'
success_url = '/contadores/create/'
def form_valid(self,form):
user = form.save()
user = authenticate(username=self.request.POST['username'],password=self.request.POST['password'])
login(request,user)
return super(RegisterView,self).form_valid(form)
def dispatch(self, request, *args, **kwargs):
if request.user.is_authenticated():
return HttpResponseRedirect('/contadores/create')
else:
return super(RegisterView, self).dispatch(request, *args, **kwargs)
显然,当我尝试使用功能视图时,我禁用了基于类的视图和URL,反之亦然,我在基于类的视图中获得的错误是:
异常类型:MultiValueDictKeyError 例外价值:"'密码'"
基于班级的观点出了什么问题?
答案 0 :(得分:0)
在POST词典中使用.get
可以规避您获得的错误。
self.request.POST.get('password', '')
如果找不到您尝试访问的密钥,则使用.get
可以提供默认值,此外它不会引发异常。
除此之外,您似乎有两个不同的密码字段,在基于功能的视图中,您有self.request.POST['password1']
,而在您的CBV中,您有self.request.POST['password']
。