【问题标题】:How to remove csrf token from search result url in Django?如何从 Django 中的搜索结果 url 中删除 csrf 令牌?
【发布时间】: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 URLSdjango csrf_token in search result urlUsing GET in a Django Form,但都没有解决我的问题。

我该如何解决这个问题?

【问题讨论】:

    标签: django django-crispy-forms django-csrf


    【解决方案1】:

    在这里回答我自己的问题,以防将来有人遇到同样的问题。 . .

    crispy form documentation 中有一个disable_csrf = False 标题。我所有的清晰逻辑和布局都在 forms.py 文件的__init__() 函数中。我刚刚添加了self.helper.disable_csrf = True,如下所示:

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.helper = FormHelper()
        self.helper.disable_csrf = True
    

    这解决了我的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多