2016-12-05 76 views
3

我正在构建一个网站,根据用户来自哪个省份,网站会有一些不同的内容。我已经建立了使用jQuery /引导弹出时,该网站上的用户的土地如果没有设置Cookie模式窗口:如何检索Django/W cookie中的cookie来设置Python变量

base.html文件

<script type="text/javascript"> 
    $(document).ready(function() { 
    if (Cookies.get('province') == null) { 
    $('#provinceModal').modal('show'); 
    } 

    $('button#ontario').click(function() { 
     Cookies.set('province', 'ontario'); 
     $('#provinceModal').modal('hide'); 
    }); 
    $('button#alberta').click(function() { 
     Cookies.set('province', 'alberta'); 
     $('#provinceModal').modal('hide'); 
    }); 
    $('button#quebec').click(function() { 
     Cookies.set('province', 'quebec'); 
     $('#provinceModal').modal('hide'); 
    }); 
    }); 
</script> 

的饼干被设置正确,因为我可以在单击其中一个按钮后在浏览器中看到它们。我遇到的问题是使用Python检索cookie。我想保存省份变量,然后使用if语句显示某些内容(取决于省份的等级)。

我已经试过这一点,我能够打印饼干到控制台:

cookies.py

import Cookie 
import os 
import requests 


def get_cookies(): 
    s = requests.session() 
    r = s.get("http://www.twitter.com") 

    cookie = r.cookies['_twitter_sess'] 

    return cookie 

如何将该值传递给Python中的变量是在模板中使用?我不确定接下来应该做什么。我错过了什么?

回答

0

我使用模板标签找到了解决方案。

@register.simple_tag(takes_context = True) 
def get_cookies(context, value1, value2): 
    request = context['request'] 
    result = request.COOKIES.get('province', '') 
    return result 

我能找到该省cookie值这种方式,并用它在我的模板像这样:

{% if request.COOKIES.province == 'ontario' %} 
    <li><a href="#">Link</a></li> 
{% endif %} 

这似乎是实现我需要的功能,最简单的方法。

4

您正在使用Python Cookie模块,而不是由HttpRequest对象设置的django模块,因为它的作用是detailed in this answer。 (现在过时了,但请继续阅读)

在您的视图中,处理该JQuery弹出窗口的后端(大概是您将它发送到Django中的一个端点,并且该代码是您视图中的一个片段),那么您想要使用 request.session文档检查并设置您的Cookie的状态。

在Django视图,例如,它看起来像这样:

def a_standard_view(request): 
    print request.session 

你可以去检查,如果cookie的设定是打得很漂亮,通过使用(再一次,这是我最初链接的部分):

从django.http进口的HttpResponse 从django.shortcuts进口呈现

def faux_login(request): 
    if request.method == 'POST': 
     if request.session.test_cookie_worked(): 
      request.session.delete_test_cookie() 
      return HttpResponse("You're logged in.") 
     else: 
      return HttpResponse("Please enable cookies and try again.") 
    request.session.set_test_cookie() 
    return render(request, 'foo/login_form.html') 

在您的特定情况下,您将需要一个n处理你的jQuery的端点(so/ajax/province /或类似)。您的jquery将需要使用get call to hit that endpoin t以及您试图存储在会话数据中的任何细节。

+0

我已经更新了我的问题,以包含使用requests.session的最新尝试。我可以从twitter.com获取cookie(尽管我从localhost检索时遇到问题,但我已经读过这可能是一个问题)。我能够将cookie打印到控制台,但我不确定如何将它传递给Python,以便我可以将它用作模板中的变量。帮帮我? – Kim

+0

您是否正在尝试使用您*设置的Cookie *,或者您是否试图获取其他网站在您的计算机上设置的Cookie?你的问题表明前者,但你在问后者。 – Withnail

+0

我最终试图通过上面的jQuery代码获取我在浏览器中设置的cookie。我无法检索,我读到它可能是因为它不适用于本地主机。但是,我能够从Twitter获取cookie,所以我认为我正处在正确的轨道上。 – Kim

相关问题