2016-12-05 69 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