【问题标题】:flask: how to architect an POST endpoint that interfaces with HTML dropdownsflask:如何构建一个与 HTML 下拉列表交互的 POST 端点
【发布时间】:2013-07-31 05:11:33
【问题描述】:

所以我有一个使用 python 脚本生成的 sqlite db 文件,我正在读取该文件以向 Flask 端点提供信息。

端点解析数据库中的项目并生成我随后传递给 Jinja 模板的 dict 对象:

@app.route('/endpoint', method=['GET', 'POST'])
def someFunction:
    << generate finalDict via db queries >>
    return render_template('whatever.html', **"finalDict": finalDict})

whatever.html 然后呈现一个引导表,即

<table>
   <tr>
      <th>
         Header 1
      </th>
      ...
   </tr>
   <tr>
     <td>
        {{ finalDict['someitem'] }}
     </td>
     ...
   </tr>
</table>

到目前为止,一切都很好,一切都如我所愿。

我想要做的是在我的表格中添加最后一列,其中包含一个下拉菜单,允许用户对该行中的项目进行分类。

因此,如果该行看起来像 ID | name | whatever ,它将有一个最终的 | [dropdown] 允许用户选择一个分类,这将始终是三种可能性之一。

我真正想知道如何构建 HTML,并且大概是在端点中捕获 if request.method == 'POST': 以适当地更新数据库。

是否可以将整个表视为form 对象,然后在用户使用上述捕获单击提交按钮后对其进行解析?

如果不是,考虑到我在这里要做的事情,构建事物的最佳方式是什么?

【问题讨论】:

    标签: python html forms flask


    【解决方案1】:

    我真正想知道的是如何构建 HTML

    您需要一个简单的 HTML 选择,其中包含 3 个选项:

    <form name="category_form" id="category_form" action="/endpoint">
        <select name='category' id='category'>
            <option value='1'>Option 1</option>
            <option value='2'>Option 2</option>
            <option value='3'>Option 3</option>
        </select>
    </form>
    

    然后在选择下拉列表时使用 ajax POST 到您的端点。例如,使用 jQuery:

    $(document).ready( function() {
        var form = $('#category_form');
    
        form.find('#category').change(function(){
            $.ajax({
                type: "POST",
                url: form.attr('action'),
                data: form.serialize(),
                success: function(response) {
                    //optionally do something
                }
            });
        });
    });
    

    大概是一个 if request.method == 'POST': 在端点中捕获以酌情更新数据库。

    这正是你的做法:-)

    if request.method == 'POST':
        data = request.form
        #do something with data
    

    data 将是您提交到端点的表单中的数据。

    Check out the docs 在请求对象上以及如何使用它。

    【讨论】:

    • 好的,这真的很有帮助,谢谢。如果我想同时收集一系列已填写的下拉列表,即如果有人要在每一行上填写下拉列表,上述方法是否也有效?还是这样设置,每次用户使用下拉菜单时,它都会触发一个 POST 请求,旨在处理该特定实例?
    • 每次用户更改下拉菜单的值时,这样做都会向您的 Flask 应用程序发送一个单独的 POST 请求。如果您想一次提交多个下拉列表,它们只需采用相同的表单(具有不同的名称),然后它们将一起提交并在 request.form 中访问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 2018-02-03
    • 1970-01-01
    • 1970-01-01
    • 2020-01-16
    • 2022-12-17
    • 2021-02-23
    相关资源
    最近更新 更多