Python 在Django表单中使用GET

Python 在Django表单中使用GET,python,django,forms,csrf,Python,Django,Forms,Csrf,我有一个关于Django表单的问题 我有一个表格可以下载CSV格式的学生成绩。字段是名称和年份,因此我有一个forms.py StudentDownloadForm(forms.Form): name=forms.CharField() year = forms.CharField() 我想在template.html中使用这个表单 context={'student_form':StudentDownloadForm(),} {%csrf_token%}{{学生表格|脆}} 因此

我有一个关于Django表单的问题

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

StudentDownloadForm(forms.Form):
  name=forms.CharField()
  year = forms.CharField()
我想在template.html中使用这个表单

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


{%csrf_token%}{{学生表格|脆}}
因此,我的问题如下:

  • 如果我使用
    method=“GET”
    ,那么csrf令牌在URL中可见,这是一个安全问题
  • 然后我可以使用
    method=“POST”
    来代替吗
  • 或者,我可以删除表单中的csrf令牌吗

根据Django文件():

对于所有未使用HTTP GET、HEAD和选项的传入请求 或跟踪,必须存在CSRF cookie和“csrfmiddlewaretoken” 字段必须存在且正确。如果不是,用户将获得 403错误

以及:

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


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

GET不需要CSRF令牌。您可以,但必须确保遵守标准和。
<form action ="" method="GET">
  {% csrf_token %}{{ student_form|crispy }}
<input type="submit" value="Query"/>
</form>