You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django报login() takes 1 positional argument but 2 were given错

报错原因

核心是命名空间冲突:
你自定义的视图函数被命名为login,这个函数只接收1个request位置参数;而你在函数内部想要调用Django内置的登录方法django.contrib.auth.login(),这个方法需要传入request和认证后的用户对象两个参数。
Python解析代码时会优先读取当前作用域下的定义,也就是你自己写的login视图,根本没有调用到Django内置的登录方法,所以传入两个参数时就会触发参数数量不匹配的报错,从报错回溯里也能看到,出错点就是你视图里写login(request, users)的那行。

修复步骤
    1. 导入Django内置登录方法时设置别名,避免名称冲突,在视图文件顶部添加导入语句:
from django.contrib.auth import login as auth_login
    1. 把视图中原来的登录调用语句替换为别名调用,同时建议把变量名users改成user(认证后返回的是单个用户对象,不是用户列表,命名更规范):
# 原代码 login(request, users) 替换为
auth_login(request, user)
    1. (强烈建议)把你当前处理注册逻辑的视图函数名从login改成更贴合功能的名字,比如signup、register_view,从代码逻辑看这个视图是处理用户注册表单的,命名为login本身就容易产生歧义,后续配置路由、维护代码时也容易和Django内置的登录视图、方法重名踩坑。如果修改了视图函数名,记得同步更新urls.py里路由绑定的视图引用。
修正后的参考代码
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login as auth_login
# 导入你的表单、模型代码省略

def signup(request):
    if request.method == 'POST':
        form = SignUpForm(request.POST)
        if form.is_valid():
            user = form.save()
            user.refresh_from_db()
            user.first_name = form.cleaned_data.get('first_name')
            user.last_name = form.cleaned_data.get('last_name')
            user.contact_number = form.cleaned_data.get('contact_number')
            user.email = form.cleaned_data.get('email')
            user.save()
            # 直接用create方法创建Customer对象不需要先实例化再save,写法更简洁
            Customer.objects.create(
                user=user,
                first_name=user.first_name,
                last_name=user.last_name,
                contact_number=user.contact_number,
                email=user.email
            )
            raw_password = form.cleaned_data.get('password1')
            auth_user = authenticate(username=user.username, password=raw_password)
            auth_login(request, auth_user)
            return redirect('Homepage')
    else:
        form = SignUpForm()
    return render(request, 'mysite/login.html', {'form': form})

内容的提问来源于stack exchange,提问作者Yuno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 08:12:13