用户=认证(请求, 用户名=用户名, 密码=密码)用户为空。

5
def login_page(request):
    form = LoginForm(request.POST or None)
    context = {
        "form": form
    }
    print("User logged in")
    #print(request.user.is_authenticated())
    if form.is_valid():
        print(form.cleaned_data)
        username  = form.cleaned_data.get("username")
        password  = form.cleaned_data.get("password")
        user = authenticate(request, username=username, password=password)
        print(user)
        print(request.user.is_authenticated())
        if user is not None:
            print(request.user.is_authenticated())
            login(request, user)
            # Redirect to a success page.
            context['form'] = LoginForm()
            return redirect("/")
        else:
            # Return an 'invalid login' error message.
            print("Error")

    return render(request, "auth/login.html", context)

你好,我开始在 Django 中尝试编程,但在一个教程中,当导师点击提交时,它会对用户进行身份验证... 我在 stack overflow 上已经找到了几乎相同的问题,但问题是,有个人使用了字符串而不是变量(用户名 = 'username'),但问题是,当我点击提交时,我收到了一个错误:

User logged in
{'username': 'test123', 'password': 'test'}
None
False
Error

User logged in is just a string in print() 
None <- print(user)
False <- print(request.user.is_authenticated())
Error <- else: print("Error")

我花了一个小时苦苦挣扎于这个问题之中(我们使用的 Django 版本相同)Django==1.11.4。


你看过这个吗?https://docs.djangoproject.com/en/1.11/topics/auth/default/#how-to-log-a-user-in - HoneyNutIchiros
是的,我曾经尝试过,即使我替换了它,我仍然得到了相同的错误。 - StyleZ
1个回答

1
我不确定是什么原因导致了你的问题。
我知道这可能不是教程中所做的事情,但我建议您使用内置的Django身份验证视图。这样,您就不必重复编写已经为您完成的代码。
这些视图非常容易使用。您只需要在URL中设置正确的路由,然后在目录“registration/login.html”下创建一个模板即可。
首先,在您的settings.py文件中设置正确的设置(我包括登录和注销步骤,因为它们是相关的):
LOGIN_REDIRECT_URL = '/page/you/redirect/to/'
LOGOUT_REDIRECT_URL = '/your/login/page/'

然后设置URL:

urls.py

from django.conf.urls import url
from django.contrib.auth import views as auth_views
from django.conf import settings

urlpatterns = [
    url(r'^login/$', auth_views.login, {'redirect_authenticated_user': True},name='login'),
    url(r'^logout/$', auth_views.logout, {'next_page': settings.LOGOUT_REDIRECT_URL}, name='logout'), 
]

最后,在与urls.py文件在同一应用程序中的模板文件夹中,放置登录和注销路由的位置,创建名为“registration”的文件夹,并创建名为“login.html”的html文件。

最后,“login.html”文件可以简单地是这样的:

{% block title %}Login{% endblock %}

{% block content %}
    <body>
        <h2>Login</h2>
        <form method="post">
            {% csrf_token %}
            {{ form.as_p }}
            <button type="submit">Login</button>
        </form>
    </body>


{% endblock %}

当您想要注销时,只需在任何位置放置一个按钮,并将其链接到“/logout”。之后,身份验证就完成了!

那个看起来是可以工作的,但是由于时间不足,没有时间用寄存器进行测试。 - StyleZ

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接