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