Django登录,模板无法识别登录用户

时间:2015-05-31 15:15:20

标签: python django django-users django-login

我正在编写一个处理用户身份验证的应用,现在我正在尝试使用该功能。

我的网址是:

登录页面模板,调用带有POST的表单的html获取用户名和密码

url(r'^$', views.login_page, name='login_page'),

从登录表单调用,收到POST数据(用户名,密码)验证用户,登录并重定向到索引页

url(r'^auth', views.auth_user, name='auth'),

索引页面,这里我们必须登录才能看到它的内容

url(r'^index$', views.index, name='index'),

所以它似乎工作,我去127.0.0.1:8000/AcademyApp/启动,它显示登录表单,登录表单发送数据到auth视图,make auth,登录和重定向到索引,但索引它喜欢它无法读取已记录的用户数据,我正在尝试:

<h1>HI {{user.username}} !!</h1>

它没有显示任何内容,只是空白。

我参与了django教程,但我认为这个功能并不是很完整,或者根本不理解它:(

这里我放了一些重要的代码:

ACADEMYAPP / URLS.PY

urlpatterns = [

    url(r'^$', views.login_page, name='login_page'),
    url(r'^auth', views.auth_user, name='auth'),
    url(r'^index$', views.index, name='index'),

HTML_LOGIN_FORM

<form action="/AcademyApp/auth" method="post">
    username: 
    <input type="text" name="username" value="" /><br />
    password:
    <input type="password" name="password" value="" /><br />
    <input type="submit" value="Log In" />
</form>

VIEWS.PY

def login_page(request):
    template = loader.get_template('AcademyApp/login.html')
    return HttpResponse(template.render())


def auth_user(request):
    username = request.POST['username']
    password = request.POST['password']
    user = authenticate(username=username, password=password)
    if user is not None:
        if user.is_active:
            login(request, user)
            # Redirect to a success page.
            return redirect("index")

        else:
            # Return a 'disabled account' error message
            template = loader.get_template('AcademyApp/error.html')
    else:
        # Return an 'invalid login' error message.
        template = loader.get_template('AcademyApp/error.html')

    return HttpResponse(template.render())


@login_required
def index(request, user):
    template = loader.get_template('AcademyApp/index.html')
    return HttpResponse(template.render())

感谢您的帮助伙伴

1 个答案:

答案 0 :(得分:0)

为了使模板能够访问user变量,您需要使用RequestContext进行渲染。但是你根本没有传递任何上下文。您应该使用render shortcut

,而不是直接调用模板加载器和渲染方法
def index(request, user):
    return render(request, 'AcademyApp/index.html', {})