表单提交发送 POST 请求而不是 GET

Posted

技术标签:

【中文标题】表单提交发送 POST 请求而不是 GET【英文标题】:Form submit sending POST request instead GET 【发布时间】:2021-10-12 13:19:06 【问题描述】:

我正在尝试使django-filter 工作,它已经工作了,但现在它突然停止了。

问题是过滤器中的submit 按钮似乎发送的是 POST 请求而不是 GET

下面是 html 代码的 sn-p

<div class="form-group">
    <form method="POST">
      % csrf_token %
      form|crispy
      <button class="btn btn-outline-success" type="submit">Add product</button>
</div>


<div id="filter-menu">
        <form method="get">
          filter.form.nick_name|as_crispy_field
          <br>
          filter.form.domain|as_crispy_field
          <br>
          <button class="btn btn-outline-success" type="submit">Filtrér</button>
        </form>
        
        <form method="get">
          filter.form.nick_name|as_crispy_field
          <br>
          filter.form.domain|as_crispy_field
          <br>
          <button class="btn btn-outline-success" type="submit">Dummy</button>
          </form>
</div>

我确实在上面看到了一个 POST 请求提交按钮,它似乎是被触发的那个,因为当我调试应用程序时,按下 apply filter 按钮时是 request.method == "POST"

有趣的是,“虚拟按钮”可以正常工作

【问题讨论】:

乍一看,您的第一个表单没有关闭 &lt;/form&gt; 标记。 它确实 - 在按钮之后 您在此处显示的代码中没有。 啊啊,在 POST 方法中。你是完全正确的 - 我怎么错过了!谢谢 【参考方案1】:

很简单不是吗?最上面的表单有 post 方法,你忘了添加它。使用下面的代码。

<div class="form-group">
    <form method="POST">
      % csrf_token %
      form|crispy
      <button class="btn btn-outline-success" type="submit">Add product</button>
</form>
</div>


<div id="filter-menu">
        <form method="get">
          filter.form.nick_name|as_crispy_field
          <br>
          filter.form.domain|as_crispy_field
          <br>
          <button class="btn btn-outline-success" type="submit">Filtrér</button>
        </form>
        
        <form method="get">
          filter.form.nick_name|as_crispy_field
          <br>
          filter.form.domain|as_crispy_field
          <br>
          <button class="btn btn-outline-success" type="submit">Dummy</button>
          </form>
</div>

问题一定是它假设所有其他形式作为第一种形式的一部分,它只是带有 post 方法的形式。这就是为什么你会得到发布结果。希望能帮助到你。如果是,请投票给答案。

【讨论】:

有帮助吗?是吗?

以上是关于表单提交发送 POST 请求而不是 GET的主要内容,如果未能解决你的问题,请参考以下文章

表单的提交有两种方式:GET和POST,这两种方式的区别是啥?

表单提交中get和post方式的区别

html中post必须要用form表单,而get就可以不用form表单就可以提交了吗?

关于AsyncHttpClient框架的post 提交表单上传文件怎么弄

搭建简单Django服务并通过HttpRequester实现GET/POST请求提交表单

表单提交中get和post方式的区别