Home > Blockchain >  login(request, user) not working in python django
login(request, user) not working in python django

Time:06-16

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.

  • Related