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

Processing Multiple POST Input Values with 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)

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

感谢任何帮助。

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

所以你可以像这样动态处理请求

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

request.formsbottle.FormsDict class 的实例。 1

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

form_items = request.forms.allitems()

只是为了一些额外的帮助。

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()))

这现在可以采用任何形式,或查询 post 并将它们组合成有效载荷。 dict() 的原因是因为 Bottle 在技术上不是 return 真正的字典,而是一个 FormsDict,它不具备字典的所有功能。这使该过程变得简单,并将所有内容都变成了字典。