Python 初学者Django:验证/登录用户

Python 初学者Django:验证/登录用户,python,django,authentication,login,Python,Django,Authentication,Login,你好!!我的认证系统有问题。我已经非常仔细地阅读了文档,但我似乎无法让它正常工作。问题似乎是,当我用清理过的表单数据调用authenticate方法时,它没有返回任何内容。它显然是在网页中这样做的(每次我提交表单时,它只会在底部返回呈现请求),我尝试通过shell以相同的方式进行身份验证,并且对于“user is None”也返回True 我想知道问题是否在于我没有包括适当的中间件?我的中间件类如下所示: 中间件\u类=( “django.contrib.sessions.middleware.

你好!!我的认证系统有问题。我已经非常仔细地阅读了文档,但我似乎无法让它正常工作。问题似乎是,当我用清理过的表单数据调用authenticate方法时,它没有返回任何内容。它显然是在网页中这样做的(每次我提交表单时,它只会在底部返回呈现请求),我尝试通过shell以相同的方式进行身份验证,并且对于“user is None”也返回True

我想知道问题是否在于我没有包括适当的中间件?我的中间件类如下所示:

中间件\u类=(
“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.xFrameOptions中间件',
)
看来我有一切必要的东西,但我只是不确定

在任何情况下,以下是我的观点代码:

从django.exe导入渲染
从django.http导入HttpResponseRedirect,HttpResponse
从django.contrib.auth.models导入用户
从django.contrib.auth.forms导入AuthenticationForm
从django.contrib.auth导入身份验证,登录
def用户登录(请求):
如果request.method==“POST”:
表单=身份验证表单(request.POST)
如果form.is_有效():
username=form.cleaned_数据['username']
password=表单。已清除的_数据['password']
用户=验证(用户名=用户名,密码=密码)
如果用户不是无:
如果user.u处于活动状态:
登录(请求、用户)
返回HttpResponse(“干得好”)
其他:
返回HttpResponse(“非活动用户”)
其他:
返回HttpResponse(“坏工作”)
其他:
form=AuthenticationForm()
返回呈现(请求'myapp/login_form.html'{
“形式”:形式,
})
下面是我非常简单的登录表单.html模板:

登录
{%csrf_令牌%}
{{form.as_p}}
更新:我已实施以下解决方案:

换线

form=AuthenticationForm(request.POST)

form=AuthenticationForm(data=request.POST)
现在我可以通过超级用户帐户登录,但普通帐户的用户名/密码组合无法识别。如果我为普通用户提交凭据,则会重新呈现表单,并显示以下消息:

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

有什么想法吗

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

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

新手失误!谢谢你的帮助。

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

从用于AuthenticationForm的

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.`

            """

你能调试一下吗:
username
password
变量的值是多少?它们是否与您在浏览器的表单中输入的相同?此外,模板中缺少
表单
结束标记。啊,谢谢,结束表单标记是我忘记缩进的。无论如何,在检查表单是否有效之前,我尝试获取这些值,但出现了以下错误:AttributeError at/login/:“AuthenticationForm”对象没有属性“cleaned_data”。看起来POST数据是正确的,但我的表单似乎没有使用is_valid()方法进行验证。我将用其中的一些信息更新问题。请参阅。如下面评论中所述,我已经完成了该实现,但现在不再简单地重新呈现我的模板,而是使用消息重新呈现模板:“请输入正确的用户名和密码等”。这是朝着正确方向迈出的一步,但是为什么它不能识别正确的用户名和密码组合呢?好的,我已经实现了这个解决方案。事实上,我得到的结果略有不同,因为我得到的信息是:请输入正确的用户名和密码。请注意,提交后再次呈现页面时,这两个字段可能区分大小写。问题是,我输入了正确的用户名和密码。请参阅问题更新。我现在可以通过超级用户登录,但不能作为普通用户。请参阅第二个问题更新。我是一个哑巴,没有在我的用户注册表单中调用适当的方法(User.objects.create\u User),密码也没有正确存储。