2011-01-08 116 views
2

我使用django的後端解決方案。我只想從cookie或session_key獲取用戶名以瞭解用戶。我如何做到這一點?從Cookie獲取用戶名

from django.contrib.auth.models import User 
from django.contrib.sessions.models import Session 

def start(request, template_name="registration/my_account.html"): 
    user_id = request.session.get('session_key') 
    if user_id: 
     name = request.user.username 
     return render_to_response(template_name, locals()) 
    else: 
     return render_to_response('account/noauth.html') 

只有其他的東西出現了。我究竟做錯了什麼?

我是否正確,那麼驗證意味着他已登錄?

- >好的,我得到了!首先,如果您對某個問題有所澄清,請更新問題,不要發佈答案或(更糟糕的)其他問題,就像您所做的一樣。其次,如果用戶註銷,按定義他沒有用戶名。

我的意思是Cookies的優點是再次識別用戶。我只想把他的名字放在網頁上。即使他已註銷。或者不可能?

+0

你應該不需要直接處理會話或Cookie的用戶名。 Django通過插入當前用戶來提供中間件來處理Web請求的無狀態(無論它們是匿名 - 未登錄 - 或Authenticated。)只要您安裝了正確的中間件,您就可以始終在那裏請求。用戶可以使用 –

回答

1

piquadrat有絕對正確的答案,但如果由於某種原因,你需要從會議獲得用戶,你叫get_decoded()對會話對象:

session_data = request.session.get_decoded() 
user_id = session_data['_auth_user_id'] 
+0

但是如何獲得用戶名? Just:name = request.user.username? – craphunter

4

您可以通過調用適用名稱is_authenticated方法來檢查用戶是否已通過身份驗證。然後,您的代碼將看起來有點像這樣:

def start(request, template_name="registration/my_account.html"): 
    if request.user.is_authenticated(): 
     name = request.user.username 
     return render_to_response(template_name, locals()) 
    else: 
     return render_to_response('account/noauth.html') 

無需自行訪問會話,Django的自動處理所有這一切(只要你同時使用django.contrib.sessionsdjango.contrib.auth)。

/編輯:爲了有一個用戶的用戶名,他需要進行身份驗證。這沒有什麼好的方法。