"user = authenticate(request, username=username, password=password)" 用户是 none
"user = authenticate(request, username=username, password=password)" user is none
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,但是在一个教程中,当导师点击提交时,它对用户进行了身份验证......我已经在堆栈溢出上发现了几乎相同的问题,但问题是,家伙有一个字符串而不是变量(用户名= '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
所以我不完全确定到底是什么导致了您的问题。
我知道这可能不是他们在教程中所做的,但我对您的建议是使用内置的 Django 身份验证视图。这样您就不必重复已经为您完成的代码。
这些视图使用起来非常简单。您需要做的就是在 URL 中设置正确的路由,然后在目录 'registration/login.html'.
下创建一个模板
首先在您的 settings.py 文件中设置正确的设置(我包括登录和注销步骤,因为它们是相辅相成的):
LOGIN_REDIRECT_URL = '/page/you/redirect/to/'
LOGOUT_REDIRECT_URL = '/your/login/page/'
然后设置URLs:
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" 的文件夹并创建一个 html 名为 "login.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 %}
当你想注销时,只要在你想要的地方放一个按钮,然后link把它放到“/logout”。之后,身份验证就完成了!
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,但是在一个教程中,当导师点击提交时,它对用户进行了身份验证......我已经在堆栈溢出上发现了几乎相同的问题,但问题是,家伙有一个字符串而不是变量(用户名= '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
所以我不完全确定到底是什么导致了您的问题。
我知道这可能不是他们在教程中所做的,但我对您的建议是使用内置的 Django 身份验证视图。这样您就不必重复已经为您完成的代码。
这些视图使用起来非常简单。您需要做的就是在 URL 中设置正确的路由,然后在目录 'registration/login.html'.
下创建一个模板首先在您的 settings.py 文件中设置正确的设置(我包括登录和注销步骤,因为它们是相辅相成的):
LOGIN_REDIRECT_URL = '/page/you/redirect/to/'
LOGOUT_REDIRECT_URL = '/your/login/page/'
然后设置URLs:
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" 的文件夹并创建一个 html 名为 "login.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 %}
当你想注销时,只要在你想要的地方放一个按钮,然后link把它放到“/logout”。之后,身份验证就完成了!