Answers:
更新:检查下面的彼得的答案为内置的解决方案:
这是设置持久性cookie的助手:
import datetime
def set_cookie(response, key, value, days_expire = 7):
if days_expire is None:
max_age = 365 * 24 * 60 * 60 #one year
else:
max_age = days_expire * 24 * 60 * 60
expires = datetime.datetime.strftime(datetime.datetime.utcnow() + datetime.timedelta(seconds=max_age), "%a, %d-%b-%Y %H:%M:%S GMT")
response.set_cookie(key, value, max_age=max_age, expires=expires, domain=settings.SESSION_COOKIE_DOMAIN, secure=settings.SESSION_COOKIE_SECURE or None)
发送响应之前,请使用以下代码。
def view(request):
response = HttpResponse("hello")
set_cookie(response, 'name', 'jujule')
return response
更新:检查下面的彼得的答案为内置的解决方案:
使用Django的会话框架应该涵盖大多数情况,但是Django现在也可以在请求和响应对象上提供直接的cookie操作方法(因此您不需要帮助函数)。
设置Cookie:
def view(request):
response = HttpResponse('blah')
response.set_cookie('cookie_name', 'cookie_value')
检索Cookie:
def view(request):
value = request.COOKIES.get('cookie_name')
if value is None:
# Cookie is not set
# OR
try:
value = request.COOKIES['cookie_name']
except KeyError:
# Cookie is not set
您可以手动设置cookie,但是根据您的用例(如果将来您想添加更多类型的持久性/会话数据),使用Django的会话功能可能更有意义。这将使您获得并设置内部绑定到用户会话cookie的变量。很棒的事情是,如果您要存储与用户会话相关的大量数据,则将其全部存储在cookie中将为HTTP请求和响应增加很多分量。使用会话时,会话cookie就是来回发送的所有内容(尽管Django存储会话数据时要注意一些开销)。
任何对此感兴趣的人都应该阅读Django Sessions的文档框架。它将会话ID存储在用户的cookie中,但是将所有类似于cookie的数据映射到您的数据库。这是对典型的基于HTTP请求的基于cookie的工作流的改进。
这是Django视图的示例...
def homepage(request):
request.session.setdefault('how_many_visits', 0)
request.session['how_many_visits'] += 1
print(request.session['how_many_visits'])
return render(request, 'home.html', {})
如果您一遍又一遍地浏览页面,您会看到该值从1开始递增,直到您清除cookie,使用新浏览器访问,隐身或执行其他避开Django Session ID cookie的操作。
cookie
和rendering a template
在一起,看到这个答案。