我有一个注册表,我需要当用户注册时自动登录,我可以使用函数视图获取它,但是当我尝试使用基于类的视图时,它不起作用
我的函数视图:
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']
。