You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中response.set_cookie()与response.cookies[]的区别是什么?

在Django 4.2.1版本中,我们可以通过response.set_cookie()和response.cookies[]两种方式设置Cookie:

# "my_app1/views.py"
from django.http import HttpResponse

def test(request):
    response = HttpResponse('Test')
    response.set_cookie('first_name', 'John') # 通过set_cookie设置
    response.cookies['last_name'] = 'Smith' # 通过直接操作cookies对象设置
    return response

设置Cookie后的效果

但使用response.delete_cookie()删除Cookie时,仅能删除通过response.set_cookie()设置的first_name,无法删除通过response.cookies[]设置的last_name:

# "my_app1/views.py"
from django.http import HttpResponse

def test(request):
    response = HttpResponse('Test')
    response.delete_cookie('first_name') # 成功删除
    response.delete_cookie('last_name') # 无法删除
    return response

删除Cookie后的效果

核心区别

  • 底层处理逻辑不同
    response.set_cookie()是Django提供的高层封装方法,会严格遵循HTTP Cookie规范处理,自动初始化Cookie的max_age、expires、domain等标准属性(即使使用默认值,也会按规范完成配置),最终将Cookie信息以标准化形式存入response.cookies(一个SimpleCookie对象)。
    而response.cookies[]是直接操作SimpleCookie的底层键值对,赋值时仅简单设置键和值,不会自动处理Cookie的标准属性,相当于写入原始的键值条目,缺少规范的属性标记。

  • 删除机制的适配性不同
    response.delete_cookie()是专门配合set_cookie()设计的方法,它会生成符合HTTP删除标准的响应头(设置expires为过去时间、max_age=0等),且仅能匹配通过set_cookie()添加的、带有完整属性的Cookie条目。
    直接通过response.cookies[]设置的Cookie,因缺少delete_cookie()所需的完整属性元数据,调用该方法时无法匹配到对应条目,也就无法完成删除操作。

内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 04:55:36