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

Django中GET请求的搜索表单是否需使用csrf模板标签?

问题解决:GET请求无需携带CSRF Token

你的问题根源很直接:GET请求的URL里出现CSRF Token,是因为你在GET表单里多余添加了{% csrf_token %}标签。

核心逻辑

CSRF(跨站请求伪造)保护的是会修改服务器数据的请求(比如POST、PUT、DELETE)——这类请求可能改变数据库状态、执行敏感操作。而GET请求是只读操作,不会修改任何数据,Django也不会对GET请求做CSRF验证,所以完全没必要在GET表单里加入CSRF Token。

具体修改

直接删除HTML表单中的{% csrf_token %}行即可:

修改前的HTML片段:

<form action="{% url 'search_results' %}" method="GET" class="search-search-form">
    {%csrf_token%}
    <input 
        type="text" 
        name="q" 
        class="search-input" 
        placeholder="Search processors..."
        value="{{ request.GET.q }}"
        aria-label="Search"
    >
    <!-- 其他元素 -->
</form>

修改后:

<form action="{% url 'search_results' %}" method="GET" class="search-search-form">
    <input 
        type="text" 
        name="q" 
        class="search-input" 
        placeholder="Search processors..."
        value="{{ request.GET.q }}"
        aria-label="Search"
    >
    <!-- 其他元素 -->
</form>

额外说明

你的视图代码完全没问题:用ListView处理GET请求,仅做数据库查询不修改数据,符合GET请求的只读语义。去掉CSRF Token后,URL就不会再携带多余的token参数,同时不会影响任何功能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 22:29:55