首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Django "login()恰好接受1个参数(给定2个)“错误

Django "login()恰好接受1个参数(给定2个)“错误
EN

Stack Overflow用户
提问于 2009-07-15 22:28:34
回答 3查看 40.7K关注 0票数 87

我尝试使用django.contrib.auth.login在会话中存储用户ID。但它并没有像预期的那样工作。

我收到错误登录()恰好接受1个参数(给定2个)

使用login(user),我在/login/ User‘’AttributeError no attribute‘’获取登录方法

我使用的是稍微修改过的示例表单http://docs.djangoproject.com/en/dev/topics/auth/

代码语言:javascript
复制
from django.shortcuts import render_to_response
from django.contrib.auth import authenticate, login

def login(request):
    msg = []
    if request.method == 'POST':
        username = request.POST['u']
        password = request.POST['p']
        user = authenticate(username=username, password=password)
        if user is not None:
            if user.is_active:
                login(request, user)
                msg.append("login successful")
            else:
                msg.append("disabled account")
        else:
            msg.append("invalid login")
    return render_to_response('login.html', {'errors': msg})

Login.html没有什么特别之处:

代码语言:javascript
复制
<html>
<head>
    <title></title>
</head>
<body>
    <form action="/login/" method="post">
        Login:&nbsp; <input type="text" name="u">
    <br/>
        Password:&nbsp; <input type="password" name="p">
        <input type="submit" value="Login">
    </form>
    {% if errors %}
        <ul>
            {% for error in errors %}
            <li>{{ error }}</li>
            {% endfor %}
        </ul>
    {% endif %}

</body>
</html>

有谁知道怎么让login()工作吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-15 22:32:57

视图函数也称为login,对login(request, user)的调用最终被解释为尝试递归调用此函数:

代码语言:javascript
复制
def login(request):
    ...
    login(request, user)

为了避免这种情况,请重命名视图函数,或者以某种不同的方式引用django.contrib.auth中的login。例如,您可以更改导入以重命名登录函数:

代码语言:javascript
复制
from django.contrib.auth import login as auth_login

...
auth_login(request, user)
票数 238
EN

Stack Overflow用户

发布于 2009-07-15 22:41:05

一种可能的修复方法:

代码语言:javascript
复制
from django.contrib import auth

def login(request):
    # ....
    auth.login(request, user)
    # ...

现在,您的视图名称不会覆盖django的视图名称。

票数 16
EN

Stack Overflow用户

发布于 2011-07-02 01:43:11

另一种方式:

代码语言:javascript
复制
from django.contrib.auth import login as auth_login

然后调用auth_login(request, user)而不是login(request, user)

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1134476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档