2010-05-28 69 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