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

使用login()函数登录时触发TypeError错误求助

解决Django登录视图中的TypeError: init() takes 1 positional argument but 3 were given

嘿,我来帮你搞定这个烦人的错误!你遇到的这个问题,本质是你调用的login不是Django auth模块提供的登录函数,而是一个类。当你写login(self.request, user)的时候,Python会把它当成实例化类的操作——这时候会把self.request、user加上类实例本身(隐式的self)一共三个参数传给类的__init__方法,但这个类的__init__只定义了接受自己的实例这一个参数,自然就报错啦。

具体修复步骤

1. 检查导入是否正确

先去你的accounts/views.py顶部看看,确保导入的是Django官方的登录函数:

from django.contrib.auth import login

别不小心导入了django.contrib.auth.views.LoginView还把它命名成login,那可是个类,不是函数!

2. 修正login的调用方式

在你视图的post方法里,直接用请求对象和验证后的用户对象调用login就好,写法没问题,但前提是login是正确的函数:

# 就这么写就行,前提是导入对了
login(self.request, user)

要是你用的是函数视图,那就改成login(request, user)。

3. 排查自定义代码的冲突

如果你自己写过叫login的类或者函数,赶紧给它改个名字,比如叫CustomLoginHandler之类的,别和Django内置的login重名,不然肯定会搞混。

给你个正确的示例代码片段参考

from django.contrib.auth import login
from django.views.generic import FormView
from .forms import LoginForm

class LoginView(FormView):
    form_class = LoginForm
    template_name = 'accounts/login.html'
    success_url = '/'

    def post(self, request, *args, **kwargs):
        form = self.get_form()
        if form.is_valid():
            user = form.get_user()
            # 这里就是正确的login调用方式
            login(request, user)
            return self.form_valid(form)
        else:
            return self.form_invalid(form)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:14:00