2010-05-28 71 views
3

我正在嘗試使用Django框架在英語和保加利亞語中構建網站。我的想法是用戶應該點擊一個按鈕,頁面將重新加載並且語言將被改變。這是我正在試圖做到這一點:在Django中無法檢索JavaScript Cookie值

在我的HTML我哈瓦一個按鈕標籤<button id='btn' onclick="changeLanguage();" type="button"> ... </button>

從cookies.js的摘錄:

function changeLanguage() { 
    if (getCookie('language') == 'EN') { 
     document.getElementById('btn').innerHTML = getCookie('language'); 
     setCookie("language", 'BG'); 
    } else { 
     document.getElementById('btn').innerHTML = getCookie('language'); 
     setCookie("language", 'EN'); 
    } 
} 

function setCookie(sName, sValue, oExpires, sPath, sDomain, bSecure) { 
    var sCookie = sName + "=" + encodeURIComponent(sValue); 
    if (oExpires) { 
     sCookie += "; expires=" + oExpires.toGMTString(); 
    } 
    if (sPath) { 
     sCookie += "; path=" + sPath; 
    } 
    if (sDomain) { 
     sCookie += "; domain=" + sDomain; 
    } 
    if (bSecure) { 
     sCookie += "; secure"; 
    } 
    document.cookie = sCookie; 
} 

而在我的views.py這個文件是的情況

@base 
def index(request): 
    if request.session['language'] == 'EN': 
     return """<b>%s</b>""" % "Home" 
    else request.session['language'] == 'BG': 
     return """<b>%s</b>""" % "Начало" 

所以我知道我的JS更改語言cookie的值,但我認爲Django不明白。另一方面,當我在我的Python代碼中再次設置並獲取cookie時,cookie會被設置。我的問題是,是否有一種方法可以使JS和Django一起工作 - JavaScript設置cookie值,Python只在被問及時纔會讀取它並採取適當的操作?

謝謝。

回答

8

該會話與cookie不同。

會話是一個內部的Django數據庫表,它的關鍵字存儲在一個cookie中。然而,除密鑰之外的其餘數據存儲在數據庫中。

如果您要訪問一個已經設置客戶端實際的cookie,你需要使用request.COOKIES詞典:

if request.COOKIES['language'] == 'EN': 
    return """<b>%s</b>""" % "Home" 
+0

非常感謝你:)。這完全是我需要的,也是一個即時回覆。 P.S.我問了我這個寬敞的問題,幾乎肯定他不會有答案,但他向我解釋了這個問題。我已經在SO上發佈了這個問題,所以他匆匆趕到他的個人電腦回答這個問題以獲得好處:D。但是你只用了一秒鐘就打敗了他:D。 – 2010-05-28 18:15:52

+0

使用cookie比使用Django的contrib中間件和會話組合更安全嗎?我發現cookies更易於理解和掌握,並且我感覺通過存儲在內部數據庫中,並根據傳入請求進行驗證,我對用戶身份驗證進行了更細緻的控制。 – SexyBeast 2016-07-17 15:40:29