首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >"user = authenticate(request,username=username,password=password)“用户为none

"user = authenticate(request,username=username,password=password)“用户为none
EN

Stack Overflow用户
提问于 2018-06-04 07:39:09
回答 1查看 1.3K关注 0票数 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,但在教程中,当导师单击submit时,它会验证用户……我已经在堆栈溢出上发现了几乎相同的问题,但问题是,一个人有一个字符串而不是变量( username = '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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 10:21:01

所以我不能完全确定到底是什么导致了你的问题。

我知道这可能不是他们在教程中要做的,但我建议您使用内置的Django身份验证视图。这样你就不必重复已经为你完成的代码了。

视图使用起来非常简单。你所需要做的就是在你的URL中设置正确的路径,然后在‘route /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文件相同的应用程序中,创建名为“注册”的文件夹,并创建名为"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“。在此之后,身份验证就完成了!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50671938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档