【发布时间】:2020-07-23 20:12:14
【问题描述】:
我正在尝试使用清晰的表单在 django 模板中实现高级搜索表单。但是当我搜索并被重定向到结果页面时,我的 URL 中有 csrf 令牌。
http://127.0.0.1:8000/search/?csrfmiddlewaretoken=EjwC5ExYEy8A9j4X9zAqXKIXrKSiApvoUeQYXgr0ieUJmo0m69uJY2zCLFaWz8Xe&name=test_csc&room=&form_index=
我稍后在 index.html 文件中有一个 POST 表单,我使用了一个 csrf 令牌,但即使我在任何地方删除了 {% csrf_token %} 的所有实例,该 url 中仍然包含 csrf 令牌。
我没有在我的视图文件中明确提及与 csrf 有任何关系。
index.html 中的高级搜索:
<form action ="{% url 'app:search_results' %}" method="GET" id="form_index">
<div class="form-group">
{% crispy form_index %}
</div>
</form>
<footer class="major">
<ul class="actions special">
<li><button type="submit" class="button" form="form_index" name="form_index">Search</button></li>
</ul>
</footer>
我应该提到form_index 也用作向数据库添加内容的表单。但是我确实为高级搜索创建了一个单独的表单来测试它是否改变了 url 中的 csrf 的任何内容,但它没有:它仍然在带有单独表单的 url 中。
我已阅读有关 csrf 令牌的 Django documentation。我没有在 GET 请求中使用过 {% csrf_token %}。我查看并尝试了答案Avoid CSRF token in URLS、django csrf_token in search result url 和Using GET in a Django Form,但都没有解决我的问题。
我该如何解决这个问题?
【问题讨论】:
标签: django django-crispy-forms django-csrf