2011-05-12 58 views
0

我正在使用登录中间件创建用户登录表单。Django检索会话用户标识

用户成功登录后,从视图中检索用户标识的最佳方法是什么?

创建一个middleware.py:

class LoginMiddleware(object): 
    def process_request(self, request): 
     if request.path != self.require_login_path and request.user.is_anonymous(): 
      if request.POST: 
       return login(request) 
      else: 
       return HttpResponseRedirect('%s?next=%s' % (self.require_login_path, request.path)) 
+1

等等,正常的auth中间件又出了什么问题? – 2011-05-12 15:33:18

+0

它没有错,我面对的问题是从视图或模板登录后检索用户ID。 – kelvinfix 2011-05-13 00:27:42

回答

5

一旦用户登录,他们的相关User对象通过request.user,请在您的模板,自动。当你说“用户ID”时,我不确定你的意思是用户名或数据库中的文字值id。尽管如此,相同的方法适用于:{{ request.user.username }}{{ request.user.id }}

此外,正如上面提到的评论者所说,除非您需要更改登录处理方式中的某些内容,否则没有理由创建新的身份验证中间件。否则,请保持独立并使用默认值。 (这似乎是你应该根据你的中间件做什么)。

更新:忽略提及,要访问您的模板request.user,您必须通过RequestContext。示例render_to_response以下:

from django.template import RequestContext 

render_to_response('templates/mytemplate.html', {}, context_instance=RequestContext(request)) 
+0

感谢克里斯的答案。我会试试看。 – kelvinfix 2011-05-13 00:28:35

+0

他可能需要将RequestContext传递给模板,对吗? – 2011-05-13 03:38:03

+0

我需要在视图中的用户ID从数据库检索数据。 – kelvinfix 2011-05-13 05:37:40