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!'
Идеально, это должно сработать.