Login(request, user) не работает в python django

urls.py это моя url-страница path('login/',views.login_view, name="login"),

views.py это мои представления

    if request.method == "POST":
        user_name = request.POST.get("username")
        pass_word = request.POST.get("password")
        user = authenticate(request, username=user_name, password=pass_word)
#        print("user1 -->", user)
        if user is not None:
#            print("user-->",user)
            login(request, user)
            return render(request, "index.html")
        else:
            return render(request,"http://127.0.0.1:8000/login")
    else:
            #return render(request, "order.html")
            return render(request, "login.html")

Ошибка, которую я получаю, это TypeError at /login/logincheck/ login() missing 1 required positional argument: 'user'

сначала создайте forms.py файл:

from django import forms

class LoginForm(forms.Form):
    username = forms.CharField(max_length=63)
    password = forms.CharField(max_length=63, widget=forms.PasswordInput)

ваша views.py должна выглядеть следующим образом:

from django.contrib.auth import login, authenticate
from . import forms

def login_view(request):
    form = forms.LoginForm()
    message = ''
    if request.method == 'POST':
        form = forms.LoginForm(request.POST)
        if form.is_valid():
            user = authenticate(
                username=form.cleaned_data['username'],
                password=form.cleaned_data['password'],
            )
            if user is not None:
                login(request, user)
                message = f'Hello {user.username}! You have been logged in'
            else:
                message = 'Login failed!'
    return render(
        request, 'authentication/login.html', context={'form': form, 'message': message})

Просто добавлю к подходу @enes islam... Это нормально с тем, что он разместил как свой ответ, но согласно вашему проекту у вас есть другое представление в вашем views.py файле под названием login, так что, возможно, он использует это представление, а не django login метод, который вы импортировали.

# You have this import line here    
from django.contrib.auth import authenticate, logout, login


# But further down you have a defined login method
def login(request):
     return render(request, "login.html")

Этот определенный метод - это то, что действительно вызывается здесь... Поэтому я бы предложил вам удалить или переименовать этот метод, а затем продолжить и использовать эту строку снова.

if user is not None:
     # Remember to pass both request and user objects to this login method
     login(request, user)

     message = f'Hello {user.username}! You have been logged in'
else:
     message = 'Login failed!'

Идеально, это должно сработать.

Вернуться на верх