使用Python Bottle处理多个POST输入值

时间:2019-02-03 09:07:36

标签: python bottle

在Bottle中,假设我有一个包含10个输入的表单:

<form method="POST" action="/machine" enctype="multipart/form-data">
    <input type="text" name="one" placeholder="one" required>
    <input type="text" name="two" placeholder="two" required>
    ...
    <input type="text" name="ten" placeholder="ten" required>
</form>

然后我想处理所有可能的输入,并且不想通过在POST路由上单独调用每个输入(例如request.forms.get(“ one”))来静态地执行此操作。

有没有一种方法可以处理表格中的所有输入。我一直在查看request.params和request.query ...

@route('/machine', method='POST')
def machine_learn():
    my_dict = dict(request.params)
    return str(my_dict)

...但是不完全了解如何使用它们以字典或列表的形式获取所有输入数据。当我使用上面的代码时,我得到一个空字典

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

request.forms返回请求中所有输入的Python Dictionary

因此您可以像这样动态处理请求

for key, value in request.forms.items():
  print("For name " + key + ", the value is " + value)

答案 1 :(得分:0)

request.formsbottle.FormsDict类的实例。 1

当您使用FormsDict子类检查bottle.MultiDict类时,有一种allitems方法可用于检索包含字段名称和值的元组的列表。 2

form_items = request.forms.allitems()

答案 2 :(得分:0)

只是需要一些其他帮助。

def merge_dicts(*args):
    result = {}
    for dictionary in args:
        result.update(dictionary)
    return result

class Api(object):
    def __init__(self, user, request, option):
        self.user = user
        self.option = option
        self.payload = merge_dicts(dict(request.forms), dict(request.query.decode()))

现在可以采用任何形式,也可以查询帖子并将它们组合成有效负载。之所以dict()是因为Bottle从技术上讲不会返回真正的字典,而是一个FormsDict,它没有适当的所有字典功能。这使该过程变得简单,并将所有内容变成字典。