如何在Django中登录用户?

我目前正在研究一个Django项目以更熟悉Django。目前,我正在尝试制作两个模板,一个是主页面,其中包含指向登录页面的链接,它将登录用户,然后返回到模板并显示其他内容(将通过nginx处理)和另一个模板只能在登录时才能访问。出于某种原因,但似乎没有工作,或者让我们说登录不起作用。

这是views.py文件:

from django.shortcuts import render_to_response, get_object_or_404, HttpResponse
from django.contrib.auth import *
from django.contrib.auth.decorators import login_required

def index(request):
        return render_to_response('index.html')

@login_required
def main(request):
    return render_to_response('loginrequired.html')

这是主要模板:

{% load static %}
{% get_static_prefix as STATIC_PREFIX %}

<html>
<head>
<title>Django NGINX Test</title>
</head>
<body>

Django NGINX Test




{% if user.is_authenticated %} Log out {{user.username}} {% else %} Log in {% endif %}

 
</body>
</html>

这是login_required模板:

{% load static %}
{% get_static_prefix as STATIC_PREFIX %}

<html>
<head>
<title>Django NGINX Test</title>
</head>
<body>

Django NGINX Test




Welcome {{user.username}}. You're now logged in as required.

{% if user.is_authenticated %} Log out {{user.username}} {% else %} Log in {% endif %}

 
</body>
</html>

最后,但并非最不重要的我的登录模板:

<html>
<head>
    <title>User Login</title>
</head>

User Login

{% if form.errors %}
    
Your username and password didn't match. Please try again. {% endif %} <form method="post" action="." > {% csrf_token %}
{{ form.username }}
{{ form.password }} <input type="hidden" name="next" value="/" /> <input type="submit" value="login" /> </form> </body> </html>

I would appreciate any help. I have already studied the Django Tutorial for this, but I didn't get it.

0
额外
意见: 1
那么,当我尝试访问login_required模板时,它只是向我显示它,而不要求登录。我不确定,如果我已经登录,但它不显示我的用户名或者我必须以某种方式将它传递给视图?
额外 作者 masterlampe,
它以什么方式不起作用?当您尝试访问需要登录的页面时会发生什么?
额外 作者 murgatroid99,
什么是错误?
额外 作者 sumit,

2 答案

用户已登录,但未将其传递给模板,因此不会显示用户详细信息。确保使用RequestContext呈现模板,或者使用新的 render 快捷方式代替 render_to_response

0
额外

您需要确保在 settings.py 中包含以下中间件:

  • SessionMiddleware
  • AuthenticationMiddleware

为确保名为 user 的上下文变量可用于您的模板,您需要确保 django.contrib.auth.context_processors.auth 上下文处理器位于 > settings.py </代码>。

更多信息可以在 Djano auth主题</一>。

0
额外
+1因为@Tom提到的原因,并补充说您应该使用 render 快捷键以确保包含 RequestContext
额外 作者 Burhan Khalid,
借用这个答案:如果你没有使用上面链接中列出的表单和方法,你就会让事情变得比他们需要的更难。
额外 作者 Tom,