在其他语言中,更新 cookie 中的过期日期等非常容易,但我一辈子都不知道如何在 Django 中做到这一点!
更新过期日期而不是设置新的 cookie 的原因是这样我就不必在每个页面上进行数据库调用。
编辑: 感谢您的所有答案,但似乎对我想要完成的任务有些困惑,所以我会尝试更准确: 设置或获取 cookie 不是问题。我想知道的是如何更新已经设置的cookie。 抱歉造成误会!
在某些时候,对于新用户,您应该设置 cookie。 Cookie 过期时间通常是针对每个用户的情况。 在 Django 中,您可以使用以下代码设置 cookie 年龄:
response = redirect('somewhere') # replace redirect with HttpResponse or render
response.set_cookie('cookie_name', 'cookie_value', max_age=1000)
上述 cookie 将在用户浏览器中 1000 秒后过期。
还有一个
expires
属性,您可以在其中指定过期日期。
参考:https://docs.djangoproject.com/en/2.0/ref/request-response/#django.http.HttpResponse.set_cookie
编辑
从 django 源代码中,尝试以下操作:
response = redirect('somewhere') # replace redirect with HttpResponse or render
response.cookies['cookie_name']['expires'] = datetime.today() + timedelta(days=1)
从今天起上述1天到期。
三种方式: 1)
response = render_to_response(template_name, {'data':'data'})
response.set_cookie("cookie_name","test_value")
return response
2Midellware:http://justcramer.com/2007/12/20/set-cookies-without-a-response-in-django/
3)模板中的 JavaScript
这就是如何使用任何上下文渲染模板并更改 cookie
context = {"any_context_key_1":"value_1", "key_2": "value_2"}
response = render(request, 'index.html', context)
response.set_cookie("this_is_cookies_key", "this_is_its_value", max_age=None)
return response
使用 Django >= 4.2 提高 Cookie 的安全性:
# set cookie with **Request**:
request.get_signed_cookie("name")
# get cookie with **Response**:
response = render(request, "index.html")
response.set_signed_cookie("name", "value")
return response
参考:https://docs.djangoproject.com/en/5.1/ref/request-response/#django.http.HttpResponse.set_cookie