gpt4 book ai didi

python - 初学者 Django : Authenticating/logging in a User

转载 作者:行者123 更新时间:2023-12-01 05:21:40 26 4
gpt4 key购买 nike

你好!我的身份验证系统遇到问题。我非常仔细地遵循了文档,但我似乎无法让它发挥作用。问题似乎是,当我使用清理后的表单数据调用验证方法时,它没有返回任何内容。显然,它是在网页中执行此操作的(每次提交表单时,它只是在底部返回渲染请求),并且我尝试通过 shell 以相同的方式进行身份验证,并且还为“用户为 None”返回 True。

我想知道问题是否是我没有包含正确的中间件?我的 MIDDLEWARE_CLASSES 如下:

MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
)

看来我拥有一切必要的东西,但我只是不确定。

无论如何,这是我的观点的代码:

from django.shortcuts import render
from django.http import HttpResponseRedirect, HttpResponse
from django.contrib.auth.models import User
from django.contrib.auth.forms import AuthenticationForm
from django.contrib.auth import authenticate, login

def user_login(request):
if request.method == 'POST':
form = AuthenticationForm(request.POST)
if form.is_valid():
username = form.cleaned_data['username']
password = form.cleaned_data['password']
user = authenticate(username=username, password=password)

if user is not None:
if user.is_active:
login(request, user)
return HttpResponse("Good Job")
else:
return HttpResponse("Inactive User")
else:
return HttpResponse("Bad Job")
else:
form = AuthenticationForm()
return render(request, 'myapp/login_form.html', {
'form': form,
})

这是我非常简单的 login_form.html 模板:

<h1>Login</h1>

<form action="/login/" method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit" />
</form>

更新:我已经实现了以下解决方案:

换了行

form = AuthenticationForm(request.POST)

form = AuthenticationForm(data = request.POST)

现在我可以通过 super 用户帐户登录,但普通帐户的用户名/密码组合无法识别。如果我提交普通用户的凭据,则会重新呈现表单并显示以下消息:

请输入正确的用户名和密码。请注意,这两个字段都可能区分大小写。

有什么想法吗?

更新2事实证明,我的注册表单中有一个错误,导致它无法正确存储通过该表单注册的新用户的密码。我正在为新的 User 对象的构造函数中进行密码分配,而您需要:

User.objects.create_user('username', 'email', 'password')

菜鸟错误!感谢您的帮助。

最佳答案

尝试form = AuthenticationForm(data = request.POST)

来自 django git对于身份验证表单:

def __init__(self, request=None, *args, **kwargs):
"""The 'request' parameter is set for custom auth use by subclasses.
The form data comes in via the standard 'data' kwarg.`

"""

关于python - 初学者 Django : Authenticating/logging in a User,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22181025/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com