urls.py
this is my url page
path('login/',views.login_view, name="login"),
views.py this is my views
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")
error I am getting is TypeError at /login/logincheck/ login() missing 1 required positional argument: 'user'
CodePudding user response:
first create a forms.py
file:
from django import forms
class LoginForm(forms.Form):
username = forms.CharField(max_length=63)
password = forms.CharField(max_length=63, widget=forms.PasswordInput)
your views.py
should seem like this:
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})
CodePudding user response:
Just to add to @enes islam's approach... It's okay with what he posted as his answer but according to your project you have another view in your views.py
file called login
so maybe it's using that view and not the django
login
method you imported.
# 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")
That defined method is what is really being called here... So I'd suggest you delete or rename that method then go ahead and use that line again.
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!'
Ideally, that should work.