login()缺少1个必需的位置参数:“ user”

时间:2018-07-26 14:23:09

标签: django django-login django-custom-user

这是我的观点,

def login_view(request) :
if request.method == 'POST':
    form = LoginForm(request.POST)
    if form.is_valid():
      email = form.cleaned_data['email']
      password = form.cleaned_data['password']
      user = authenticate(email=email, password=password)

      if user is not None:
          form = LoginForm()
          login(request, user)

我收到错误消息:

login() missing 1 required positional argument: 'user'

此外,我正在使用自定义用户模型

编辑

我的urls.py

urlpatterns = [
path('',views.register, name='register' ),
path('form',views.form, name = 'form'),
path('login',views.login, name = 'login ')]

4 个答案:

答案 0 :(得分:3)

您使用的视图不正确,请尝试

path('login',views.login_view, name = 'login ')

答案 1 :(得分:0)

from django.urls import path, include
from django.contrib.auth import views

urlpatterns = [
path('',views.register, name='register' ),
path('form',views.form, name = 'form'),
path('login/', views.login, {'template_name': 'login.html'}, name='login'),
]

from django.urls import path, include
from django.contrib.auth import views as auth_views

urlpatterns = [
path('',views.register, name='register' ),
path('form',views.form, name = 'form'),
path('login/', auth_views.login, {'template_name': 'login.html'}, name='login'),
]

如果您使用的是django自己的身份验证方案,第二个示例将更加准确。

我实际上更改了url文件中的登录路径。我认为该错误是由于路径连接引起的。 那是路径=>

path('login',views.login, name = 'login ')]

答案 2 :(得分:0)

内置的Django用户身份验证仅接受用户名和密码登录。如果要通过电子邮件和密码登录用户,则必须进行更改。

答案 3 :(得分:0)

您在 views.py 中将函数声明为 login_view,但在 urls.py 上将其称为登录名。试试 view.login_view。