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
相关产品推荐
相关产品推荐

