已认证但 user.is_authenticated 仍为假
我正在用GAE和Django-nonrel创建一个简单的应用程序(我觉得这个问题并不是特定于GAE或这个非关系型分支,可能是因为我对Python和Django还不太熟悉,基本的Django安装也可能会出现类似的问题)。
我使用django.contrib.auth来处理用户认证。
在settings.py文件中
MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware', )
TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
'django.core.context_processors.request', )
我用manage.py创建了一个超级用户。
在templates的base.html文件中,我有以下内容,这个文件在其他模板中通过{% extends 'base.html' %}来使用。
{% if user.is_authenticated %}
Hello {{ user.username }}
[<a href="{% url django.contrib.auth.views.logout %}">sign out</a>]
{% else %}
[<a href="{% url django.contrib.auth.views.login %}">sign in</a>]
{% endif %}
在urls.py中,我设置了标准的认证内容(比如从django.contrib.auth.forms导入AuthenticationForm等)。
问题是,我可以成功进行认证,用户名和密码的检查是有效的(不能使用错误的用户名/密码),而且我在管理页面上也能认证通过——但在其他页面上却不行——或者说是可以,但用户信息是空的(None)。
我认为"django.contrib.auth.context_processors.auth"是让这一切发生的关键,但这部分已经在settings.py中设置好了,如上所示。
有没有什么建议可以帮助我找到这个问题的根源?
编辑(扩展Daniels的回答,因为在评论中无法进行代码格式化)
在views.py中,我写的是:
def detail(request):
obj = get_object_or_404(MyModel, pk=some_id)
return render_to_response('myapp/index.html', {'MyModel': obj})
应该是
return render_to_response('myapp/index.html', {'MyModel': obj}, RequestContent(request))
2 个回答
0
请查看 django-postman丢弃RequestContext。在这里,你给TEMPLATE_CONTEXT_PROCESSORS赋值了两个项目,这样就覆盖了默认的项目。
4
你在渲染模板的时候,有没有使用RequestContext?如果没有使用的话,上下文处理器是不会被应用的。