Iva*_*n P 38 python post mongodb pymongo flask
我正在使用Flask和MongoDB.我试图将request.form的内容转换为适合通过PyMongo保存的内容.似乎应该经常出现一些现成的解决方案.
那么Flask给我的是:
ImmutableMultiDict([('default', u''), ('required': u'on'), ('name', u'short_text'), ('name', u'another'), ('submit', u'Submit')])
Run Code Online (Sandbox Code Playgroud)
而我希望得到的是接近这一点:
{
'default': '',
'name': ['short_text', 'another'],
'required': true
}
Run Code Online (Sandbox Code Playgroud)
Vb4*_*407 48
>>> 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']}
Run Code Online (Sandbox Code Playgroud)
.to_dict(flat=False)
是要记住的事情.请参阅相关文档
Joe*_*cci 18
Flask ImmutableMultiDict
数据结构具有内置to_dict
方法.
除了Flask request
对象form
属性之外,这些知识ImmutableMultiDict
允许简单地处理对MongoDB的表单POST请求.
请参阅下面的一个天真的例子:
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)
Run Code Online (Sandbox Code Playgroud)
lov*_*esh 17
您可以使用werkzeug的getlist来编写这样的代码
data = dict((key, request.form.getlist(key)) for key in request.form.keys())
Run Code Online (Sandbox Code Playgroud)
现在每个键data
都是一个包含1个元素的列表.要以您的格式准确获得结果,请执行此操作
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())
Run Code Online (Sandbox Code Playgroud)
现在这是低效的,因为每个键有3个调用request.form.getlist(key)
.你可以写一个循环并绕过它.
归档时间: |
|
查看次数: |
39062 次 |
最近记录: |