django官網上有一篇文章介紹的是Making User info available outside requests
http://code.djangoproject.com/wiki/CookBookThreadlocalsAndUser
國內的見這篇:Django tips: 沒有了request對象,還能找到當前登入使用者user嗎?
網址:http://www.cnblogs.com/fengmk2/archive/2008/07/23/1213727.html
就是講的怎麼在request之外取得目前使用者,他用了一個中介軟體,ThreadLocals實現:
- # -*- coding: utf-8 -*-
- # Description: thread locals middleware
- # Create: 2008-6-4
- try:
- from threading import local
- except ImportError:
- from django.utils._threading_local import local
- _thread_locals = local()
- def get_current_user():
- return getattr(_thread_locals, 'user', None)
- class ThreadLocals(object):
- """Middleware that gets various objects from the
- request object and saves them in thread local storage."""
- def process_request(self, request):
- _thread_locals.user = getattr(request, 'user', None)
這個我按照上面2篇文章說的做成了中介軟體並加入到了我的項目中,也可以在request對象之外取得當前登陸user,但是問題還是有的,問題就是在同一台電腦上,當前網站使用者A如果登出了,使用使用者B登入,就會發現取得的使用者是A使用者。必須重啟web伺服器才得到使用者B,或者修改應用ThreadLocals的那個模組檔案。
較好的取得目前使用者的做法是張教主的這篇:Django中用newform儲存目前使用者為作者 ,newform已經是forms了,採用在View中擷取目前使用者。
當然在request之外,比如說model中取得requset.user的方法就是覆蓋model的某些含request參數的方法來取得user。
比如說覆蓋save_model()方法。