2010-02-19 49 views
0

這是檢查會話中用戶名變量和輸出(取決於它是否存在)或「您已登錄」的最有效和最乾淨的方式。或「您已註銷」。爲render_to_response寫入更好的會話變量檢查代碼

PYTHON(DJANGO)

def logged_in(request) 
    return render_to_response('loggedincheck.html', {'request': request.session.get['username']}) 

HTML

{如果請求%} 您在已經登錄。{%其他%} 你沒有登錄in。{%endif%}

回答

5

Django自帶了一些模板context處理器 - 這只是一些變量插入到每一個被您的網站上呈現的模板功能。

正如@Jack所述,其中一個名爲django.core.context_processors.auth。這會在每個模板中插入名爲user的變量,並且默認情況下處於啓用狀態。

因此,要找出一個用戶登錄或沒有,你應該在你的模板中使用此代碼:

{% if user.is_authenticated %} 
    You're logged in. 
{% else %} 
    You're not logged in. 
{% endif %} 

用傑克給了代碼的問題,就是user變量總是存在 - 所以總是會評估爲True(只要您使用的是django.core.context_processors.request上下文處理器,默認情況下啓用而不是)。因此,要確定用戶是否實際登錄,您必須使用is_authenticated()方法。

0

如果您使用的是django.contrib.auth兩者django.core.context_processors.authdjango.core.context_processors.request在您TEMPLATE_CONTEXT_PROCESSORS,你可以簡單地使用:

{% if request.user.is_authenticated %} 
    You're logged in. 
{% else %} 
    You're not logged in. 
{% endif %} 
+0

-1'request.user'始終存在,因爲未經身份驗證的用戶(每個用戶)也是用戶。 – 2010-02-22 15:14:04

+0

你是對的。我習慣於檢查特定的權限,而不是如果他們通過身份驗證,所以我忘了在那裏查找那一點。我解決了它。 – 2010-02-22 15:42:38