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

Django会话期间Session变量无法更新问题求助

原POST请求方案的问题分析

1. 表单重复action属性导致请求方式错误

原HTML表单存在重复属性的错误:

<form action="{% url 'watchlist_del' item.id %}" action="post">

HTML规范不允许同一元素拥有重复属性,浏览器会直接忽略第二个action属性。而表单默认的请求方式是GET,所以点击「Delete」按钮时,实际发送的是GET请求,完全不会触发视图里if request.method == "POST"的代码分支,删除逻辑根本没执行,session自然不会更新。

2. 缺少CSRF令牌(即使请求方式修正也会失败)

Django默认开启CSRF防护机制,所有POST请求必须携带CSRF令牌才能通过验证。原表单没有添加{% csrf_token %}标签,就算你把表单的请求方式改对(比如写成method="post"),也会返回403 Forbidden错误,无法执行后续的删除操作。

3. 补充:session更新的潜在注意点

就算上述表单问题全部修复,直接修改request.session["watchlist"]这类嵌套可迭代对象时,Django有时无法自动检测到session的修改,需要手动添加:

request.session.modified = True

不过这不是你本次问题的核心原因,核心还是请求方式没触发到POST分支。

为什么改用<a>标签能生效?

改用<a>标签后,发送的是GET请求,而修改后的视图直接通过item_id is not None判断执行删除逻辑,不再限制请求方式,所以能正常触发删除操作、更新session,页面刷新后就能看到实时变化。


内容的提问来源于stack exchange,提问作者Bhashwar Sengupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 09:36:29