如何在 Django/Wagtail 中检索 cookie 以设置 Python 变量
How to retrieve a cookie in Django/Wagtail to set Python variable
我正在建立一个网站,该网站将根据用户来自的省份提供一些不同的内容。如果没有设置 cookie,我已经使用 jQuery/Bootstrap 设置了模式 window 以在用户登陆网站时弹出:
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>
cookie 设置正确,点击其中一个按钮后我可以在浏览器中看到它们。我遇到的问题是使用 Python 检索 cookie。我想保存省份变量,然后使用if语句显示某些内容(取决于省份等于什么)。
我试过了,我可以将 cookie 打印到控制台:
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 中的变量以在模板中使用?我不确定下一步该做什么。我错过了什么?
您正在使用 Python Cookie 模块,而不是 HttpRequest 对象设置的 django 模块,如 。 (现已过时,但请继续阅读!)
在您看来正在处理 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')
在您的特定实例中,您将需要一个端点(因此 /ajax/province/ 或类似的)来处理您的 jquery。您的 Jquery 需要将 get call to hit that endpoint 与您尝试存储在会话数据中的任何详细信息一起使用。
我找到了使用模板标签解决我的问题的方法。
@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 %}
这似乎是实现我正在寻找的功能的最简单方法。
我正在建立一个网站,该网站将根据用户来自的省份提供一些不同的内容。如果没有设置 cookie,我已经使用 jQuery/Bootstrap 设置了模式 window 以在用户登陆网站时弹出:
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>
cookie 设置正确,点击其中一个按钮后我可以在浏览器中看到它们。我遇到的问题是使用 Python 检索 cookie。我想保存省份变量,然后使用if语句显示某些内容(取决于省份等于什么)。
我试过了,我可以将 cookie 打印到控制台:
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 中的变量以在模板中使用?我不确定下一步该做什么。我错过了什么?
您正在使用 Python Cookie 模块,而不是 HttpRequest 对象设置的 django 模块,如
在您看来正在处理 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')
在您的特定实例中,您将需要一个端点(因此 /ajax/province/ 或类似的)来处理您的 jquery。您的 Jquery 需要将 get call to hit that endpoint 与您尝试存储在会话数据中的任何详细信息一起使用。
我找到了使用模板标签解决我的问题的方法。
@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 %}
这似乎是实现我正在寻找的功能的最简单方法。