为什么我无法在功能视图中注册后登录,但不能使用基于类的视图?

时间:2015-01-07 07:46:54

标签: django formview django-class-based-views

我有一个注册表格,我需要当用户注册表自动登录时,我可以通过功能视图获取它,但是当我尝试使用基于类的视图时它不起作用

我的功能视图:

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    例外价值:"'密码'"

基于班级的观点出了什么问题?

1 个答案:

答案 0 :(得分:0)

在POST词典中使用.get可以规避您获得的错误。

self.request.POST.get('password', '')

如果找不到您尝试访问的密钥,则使用.get可以提供默认值,此外它不会引发异常。

除此之外,您似乎有两个不同的密码字段,在基于功能的视图中,您有self.request.POST['password1'],而在您的CBV中,您有self.request.POST['password']