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

Django中GET请求URL含csrf参数,为何看似POST请求?

Django GET表单URL带csrfmiddlewaretoken参数的原因及解决

原因

你在模板里加了{% csrf_token %}标签对吧?Django不管你表单用的是GET还是POST,只要加了这个标签,就会生成一个csrfmiddlewaretoken的隐藏输入字段。而GET请求提交时,浏览器会把表单里所有字段(包括这个隐藏的token)都拼到URL的查询参数里,所以就出现了你看到的情况。

顺带说一句,CSRF保护本来就是给POST、PUT这类会修改数据的请求用的,GET请求根本不需要这个token。

对应代码示例

假设你的HTML模板是这样的:

<form method="get" action="/idresults/">
    {% csrf_token %}
    <input type="text" name="name" value="zemdegs">
    <button type="submit">提交</button>
</form>

views.py代码大概是:

from django.shortcuts import render

def idresults(request):
    print(request.method)  # 输出GET
    return render(request, 'results.html')

就是模板里的{% csrf_token %}搞的鬼,生成的隐藏字段被GET请求带去URL里了。

解决方法

直接把模板里的{% csrf_token %}删掉就行,GET请求没必要加这个,删掉后URL就不会带csrfmiddlewaretoken参数了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 18:25:39