登录(请求,用户)在 python django 中不起作用

问题描述 投票:0回答:3

这是我在

urls.py
文件中的页面网址:

path('login/',views.login_view, name="login"),

这是我的页面视图,包含

views.py
文件:

def login_view(request):
    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")

我收到的错误是:

/login/logincheck/login() 处的类型错误缺少 1 个必需的位置 参数:'用户'

python django authentication
3个回答
0
投票

首先创建一个

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

0
投票

只是为了添加@enes islam 的方法...他发布的内容作为答案是可以的,但根据您的项目,您的

views.py
文件中有另一个名为
login
的视图,所以也许它正在使用该视图而不是
 django
login
您导入的方法。

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


# But I noticed further down you have a defined login method

def login(request):  # -> rename this method name to loginDjano or another name.
     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!'

理想情况下,这应该可行。


0
投票

我有同样的错误,我读了这个主题。我无法解决我的错误。

> RuntimeError:模型类 allauth.account.models.EmailAddress 没有 声明显式 app_label 并且不在 INSTALLED_APPS 中的应用程序中。

© www.soinside.com 2019 - 2024. All rights reserved.