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



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

我的函数视图:

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,反之亦然,我在基于类的视图上遇到的错误是:

异常类型:多值字典键错误 异常值:"密码"

我的基于类的观点有什么问题?

您可以通过在 POST 字典上使用.get来规避您遇到的错误。

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

使用 .get 将使您能够在找不到您尝试访问的密钥时提供默认值,此外它不会引发异常。

除此之外,您

似乎有两个不同的密码字段,在基于函数的视图中,您有self.request.POST['password1'],在您的 CBV 中,您有self.request.POST['password']

最新更新