首页 > 解决方案 > /website/login/:login() 的 TypeError 采用 1 个位置参数,但给出了 2 个

问题描述

我正在使用 Django 创建一个网站,我是它的初学者。

视图.py:

def login(request):
  if request.method == "POST":
    form = AuthenticationForm(data=request.POST)
    if form.is_valid():
      user=form.get_user()
      login(request,user)
      if 'next' in request.POST:
        return HttpResponseRedirect(reverse(request.POST.get('next')))
      else:
        return HttpResponseRedirect(reverse('website:books'))
    else:
      return render(request,'website/login.html')
  else:
    form=AuthenticationForm()
  return render(request,'website/login.html',{'form':form})

我得到的错误是:

File "D:\playground\blog\website\views.py", line 16, in login
login(request,user)
TypeError: login() takes 1 positional argument but 2 were given
[10/Mar/2020 14:34:57] "POST /website/login/ HTTP/1.1" 500 74342

我错过了什么?

标签: pythondjango

解决方案


问题是您的自定义函数称为“登录”,然后您尝试调用django.contrib.auth也称为.django 的 django 函数login

看看那条线,你打电话login(request,user)

所以修复就是其中之一

  1. 将您的视图重命名为登录以外的其他名称
  2. 在导入中使用“as”将现有函数别名为其他函数。EGfrom django.contrib.auth import login as django_login然后更改login(request,user)django_login(request,user)

推荐阅读