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.
3 Réponses :
Vous pouvez donc traiter la requête dynamiquement comme ceci request.forms
renvoie un Dictionnaire Python a > de toutes les entrées de la requête. for key, value in request.forms.items():
print("For name " + key + ", the value is " + value)
Bienvenue! Bonne chance sur l'application Web! :-)
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()
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.