3
votes

Traitement de plusieurs valeurs d'entrée POST avec Python Bottle

Dans Bottle, disons que j'ai un formulaire avec 10 entrées:

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

Je veux ensuite traiter toutes les entrées potentielles et je ne veux pas le faire de manière statique en appelant chacune individuellement sur la route POST (par exemple request.forms.get ("one")).

Existe-t-il un moyen de traiter toutes les entrées du formulaire. J'ai vu request.params et request.query ...

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

... mais je ne comprends pas vraiment comment je peux les utiliser pour obtenir toutes les données d'entrée sous forme de dictionnaire ou de liste. Lorsque j'utilise le code ci-dessus, j'obtiens un dictionnaire vide

Toute aide est appréciée.


0 commentaires

3 Réponses :



0
votes

request.forms est une instance de la classe bottle.FormsDict . 1

Lorsque vous examinez la classe bottle.MultiDict avec les sous-classes FormsDict, il existe une méthode allitems qui peut être utilisée pour récupérer une liste contenant des tuples de nom et de valeur de champ. 2 p>

form_items = request.forms.allitems()


0 commentaires

0
votes

Juste pour une aide supplémentaire.

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

Cela peut maintenant prendre n'importe quelle forme, ou interroger un post et les combiner en une charge utile. La raison du dict () est que Bottle ne renvoie techniquement pas un vrai dict, mais plutôt un FormsDict qui n'a pas toutes les fonctionnalités d'un dict en place. Cela rend ce processus simple et transforme tout en un dict.


0 commentaires