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

7

以下是我的观点:

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)

I get an error:

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 ')]

能否让我们看一下你的 urls.py 文件? - scharette
当然。我会添加它。 - AJAY RAWAT
@scharette 请提供一个解决方案,谢谢:) - AJAY RAWAT
你可能在某个地方用另一个函数覆盖了 login - Willem Van Onsem
5个回答

12

你没有使用正确的视图,请尝试使用以下内容

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

非常感谢。 - AJAY RAWAT
我忘了改那个。我的错。现在它运行得很顺畅。谢谢 :) - AJAY RAWAT

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 ')]

这个答案有点让人困惑。您能否更详细地介绍一下您的解决方案的目的? - scharette
你说得对。错误在于URL。谢谢 :) - AJAY RAWAT

0

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


哦,我的错。没有注意到那个。 - Sam

0
在views.py文件中,你声明了函数名为login_view,但是在urls.py文件中却调用了login。尝试使用view.login_view。

0
在你的代码中,似乎你定义了一个名为login_view的函数,但在你的URL配置中,你引用了一个名为login的函数。这个函数名称不匹配可能导致了错误。
请将你的URL配置中的函数名称更改为与视图函数名称相匹配。
urlpatterns = [
    # other URL patterns
    path('login', views.login_view, name='login'),
]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接