In Flask convert form POST object into a representation suitable for mongodb
>>> from werkzeug.datastructures import ImmutableMultiDict>>> imd = ImmutableMultiDict([('default', u''), ('required', u'on'), ('name', u'short_text'), ('name', u'another'), ('submit', u'Submit')])>>> imd.to_dict(flat=False)>>> {'default': [''], 'name': ['short_text', 'another'],'required': ['on'],'submit': ['Submit']}
.to_dict(flat=False)
is the thing to keep in mind. See the relevant documentation
The Flask ImmutableMultiDict
data structure has a built in to_dict
method.
This knowledge in addition to the Flask request
object form
property being an ImmutableMultiDict
allows for simple handling of a form POST request to MongoDB.
See below for a naive example:
from flask import request@app.route('/api/v1/account', methods=['POST'])def create_account(): """Create user account""" account_dict = request.form.to_dict() db.account.insert_one(account_dict)
You can use werkzeug's getlist to write code like this
data = dict((key, request.form.getlist(key)) for key in request.form.keys())
Now each key of data
would be a list which would contain 1 more element. To get results exactly in your format do this
data = dict((key, request.form.getlist(key) if len(request.form.getlist(key)) > 1 else request.form.getlist(key)[0]) for key in request.form.keys())
Now this is inefficient because for each key there are 3 calls to request.form.getlist(key)
. You can write a loop and get around it.