在Django表单中使用GET

时间:2015-11-04 04:42:57

标签: python django forms csrf

我有关于Django Forms和GET的问题

我有一张表格可以下载CSV格式的学生成绩。字段是名称和年份,因此我有 forms.py

StudentDownloadForm(forms.Form):
  name=forms.CharField()
  year = forms.CharField()

我想在 template.html with

中使用此表单

context={'student_form' : StudentDownloadForm(),}

<form action ="" method="GET">
  {% csrf_token %}{{ student_form|crispy }}
<input type="submit" value="Query"/>
</form>

所以我的问题如下:

  • 如果我使用method="GET",那么网址中会显示csrf令牌,这是一个安全问题
  • 我可以使用method="POST"代替吗?
  • 或者,我可以删除表格中的csrf令牌吗?

1 个答案:

答案 0 :(得分:2)

根据Django文档(Cross Site Request Forgery protection):

  

对于未使用HTTP GET,HEAD,OPTIONS的所有传入请求   或TRACE ,必须存在CSRF cookie,并且'csrfmiddlewaretoken'   字段必须存在且正确。如果不是,用户将得到一个   403错误。

  

它故意忽略GET请求(以及其他请求)   RFC 2616定义为“安全”。这些要求不应该有任何要求   有潜在危险的副作用,因此使用GET进行CSRF攻击   请求应该是无害的。 RFC 2616将POST,PUT和DELETE定义为   '不安全',并且所有其他方法都被假定为不安全,最大限度   保护。

因此,您可以省略GET要求的CSRF令牌