这是比特定代码问题更多的理论问题。
我很困惑如何在Django中存储和访问用户名,用户电子邮件等信息
据我所知:
我可以像{{user.username}}
IF一样使用render()
或render_to_response()
使用RequestContext来访问它。如果我使用HttpResponseRedirect
登录页面,而无法访问user.username
,则此处只是空白。
我想知道的事:
有没有办法从每个页面访问用户数据,无论我如何到达那里?我的意思是即使我根本不使用任何视图,例如手动输入地址
奇怪的是,我一直认为像用户名这样的数据可以通过会话访问,但是关于这个主题的10篇文章中有9篇总是谈论RequestContext和其他将值从一个页面传递到另一个页面的东西。
我还阅读了自定义上下文处理器,但我认为它只适用于特定用途,而不是简单的用户名。
所以也许简而言之,问题是:
如果我想在网站的每个页面的角落显示例如用户名 - 我该怎么做?
这里会发生什么(对于傻瓜)
HttpResponseRedirect根本不会影响任何事情。问题是它正在重定向到不包含RequestContext的render_to_response()调用。如果我们没有指定RequestContext,它会把它写成空白并强制它覆盖context_processor.auth给出的会话数据,所以你基本上没有任何东西作为你在这个页面的上下文数据。
应该如何完成(在我看来)是你总是在任何视图中使用带有RequestContext的render()或render_to_response(),不要忘记它。并且不要担心各种重定向,因为它们不会影响上下文数据。静态html页面从处理器获取上下文数据,它可以工作,我的错,我事先没有检查过两次。
答案 0 :(得分:1)
输出{{ user.username }}
。如果用户已登录,则会启用某些auth middleware和django.contrib.auth.context_processors.auth
上下文处理器,然后会显示用户名。
中间件从会话中获取用户标识,从数据库加载User
并设置request.user
属性。然后上下文处理器获取request.user
属性并将其作为user
变量注入RequestContext。
要使模板中的user
变量可用,您应该使用render()
快捷方式。或者render_to_response()
,RequestContext
作为context_instance
参数。