Django "login () nhận đúng 1 đối số (2 đối số đã cho)"


86

Tôi đang cố gắng lưu trữ ID của người dùng trong phiên bằng django.contrib.auth.login. Nhưng nó không hoạt động không như mong đợi.

Tôi nhận được lỗi đăng nhập () nhận đúng 1 đối số (2 đối số đã cho)

Với đăng nhập (người dùng) Tôi nhận được AttributeError tại / login / Đối tượng 'người dùng' không có thuộc tính 'phương thức'

Tôi đang sử dụng biểu mẫu mẫu được sửa đổi một chút http://docs.djangoproject.com/en/dev/topics/auth/ :

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})

không có gì đặc biệt về login.html:

<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>

Có ai có ý tưởng làm thế nào để đăng nhập () hoạt động.


4
sẽ có tác dụng nếu bạn đổi tên cái nhìn của bạn
Evgeny

Chỉ là câu hỏi và câu trả lời mà tôi đang tìm kiếm. Một trong số những sai lầm tôi đã mắc phải khi cố gắng đăng nhập và chạy trong django, cùng với việc sử dụng Contexts so với RequestContexts và bỏ qua csrf_tokens.
chucksmash

ở đây bạn có thể tìm thấy một hướng dẫn về sử dụng Django lowcoupling.com/post/71289666862/django-the-user-tutorial đó cũng là một dự án GitHub bạn có thể sao chép và kiểm tra
lowcoupling

Câu trả lời:


236

Hàm view của bạn cũng được gọi loginvà lệnh gọi login(request, user)kết thúc được hiểu là một nỗ lực gọi hàm này một cách đệ quy:

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

Để tránh nó, hãy đổi tên chức năng xem của bạn hoặc tham chiếu đến logintừ django.contrib.auththeo một số cách khác nhau. Ví dụ, bạn có thể thay đổi nhập để đổi tên chức năng đăng nhập:

from django.contrib.auth import login as auth_login

...
auth_login(request, user)

Chà, tôi đang duyệt qua mã nguồn của Django và thử mọi phiên bản cũ hơn có sẵn, nghĩ rằng mình sắp phát điên
Mojimi

16

Một cách sửa chữa có thể:

from django.contrib import auth

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

Bây giờ tên chế độ xem của bạn không ghi đè lên tên chế độ xem của django.


9

Cách khác:

from django.contrib.auth import login as auth_login

sau đó gọi auth_login(request, user)thay vì login(request, user).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.