Html Django authenticate始终返回None(无)

Html Django authenticate始终返回None(无),html,django,python-3.x,django-forms,django-views,Html,Django,Python 3.x,Django Forms,Django Views,我一直在尝试添加注册/登录/注销功能。用户注册似乎工作正常,因为创建的用户显示在Django admin中,并显示在数据库中。然而,每当我尝试实现登录功能时,它都不会起作用。我想我已经把问题缩小到authenticate() 我已经尝试了一切,无论我做什么,authenticate()函数总是返回None。我提供的用户名和密码显然已被存储,但它似乎没有正确获取密码,因为在login\u user视图中打印出raw\u password=form.cleaned\u data.get('passw

我一直在尝试添加注册/登录/注销功能。用户注册似乎工作正常,因为创建的用户显示在Django admin中,并显示在数据库中。然而,每当我尝试实现登录功能时,它都不会起作用。我想我已经把问题缩小到
authenticate()

我已经尝试了一切,无论我做什么,
authenticate()
函数总是返回
None
。我提供的用户名和密码显然已被存储,但它似乎没有正确获取密码,因为在
login\u user
视图中打印出
raw\u password=form.cleaned\u data.get('password1')

如何使登录功能正常工作

url.py中

urlpatterns = [
    path('register', views.register_user, name='register'),
    path('login', views.login_user, name='login'),
    path('logout', views.logout_user, name='logout'),
]
def register_user(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)

        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            print(f'User is: {user}')
            login(request, user)
            return redirect('/')

    else:
        form = UserCreationForm(request.POST)

    context = {
        'form': form
    }
    return render(request, 'register.html', context)

def login_user(request):
    if request.method == 'POST':
        form = AuthenticationForm(request=request, data=request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            print(f'User is: {user}')
            print(f'username is: {username}')
            print(f'password is: {raw_password}')
            if user is not None:
                if user.is_active:
                    login(request, user)
                    print(f'You are now logged in as {username}')
                    messages.info(request, f"You are now logged in as {username}")
                    return redirect('/')
    else:
        form = AuthenticationForm()

    return render(request = request,
                    template_name = "login.html",
                    context={"form":form})

def logout_user(request):
    logout(request)
    return redirect('/')
视图中.py

urlpatterns = [
    path('register', views.register_user, name='register'),
    path('login', views.login_user, name='login'),
    path('logout', views.logout_user, name='logout'),
]
def register_user(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)

        if form.is_valid():
            form.save()
            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            print(f'User is: {user}')
            login(request, user)
            return redirect('/')

    else:
        form = UserCreationForm(request.POST)

    context = {
        'form': form
    }
    return render(request, 'register.html', context)

def login_user(request):
    if request.method == 'POST':
        form = AuthenticationForm(request=request, data=request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            raw_password = form.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            print(f'User is: {user}')
            print(f'username is: {username}')
            print(f'password is: {raw_password}')
            if user is not None:
                if user.is_active:
                    login(request, user)
                    print(f'You are now logged in as {username}')
                    messages.info(request, f"You are now logged in as {username}")
                    return redirect('/')
    else:
        form = AuthenticationForm()

    return render(request = request,
                    template_name = "login.html",
                    context={"form":form})

def logout_user(request):
    logout(request)
    return redirect('/')
register.html中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Registration</title>
</head>
<body>
    <h2>Register</h2>
    <form method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Register</button>
    </form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Log in</title>
</head>
<body>
    <h2>Log in</h2>
    <form method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Log in</button>
    </form>
</body>
</html>

登记处
登记
{%csrf_令牌%}
{{form.as_p}}
登记
login.html中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Registration</title>
</head>
<body>
    <h2>Register</h2>
    <form method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Register</button>
    </form>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Log in</title>
</head>
<body>
    <h2>Log in</h2>
    <form method="POST">
        {% csrf_token %}
        {{ form.as_p }}
        <button type="submit">Log in</button>
    </form>
</body>
</html>

登录
登录
{%csrf_令牌%}
{{form.as_p}}
登录

register\u user
logout\u user
视图似乎工作正常。在
register\u user
视图中,我将其设置为在注册后自动记录用户。奇怪的是,在这种情况下登录是有效的。但是,由于上述原因,登录不适用于登录用户视图。

raw\u password=form.cleaned\u data.get('password1')
此处必须获取密码本身,而不是密码1