【发布时间】:2018-06-25 13:54:10
【问题描述】:
我正在使用 webargs 使用 Marshmallow 解析来自 request.args 的参数,并将它们作为参数传递给 Flask 视图。我的客户使用逗号分隔的列表来表示一个键的多个值:
/queues/generate?queue_id=4&include_ids=1,2,3
为了解析这个,我使用 Marshmallow 的 DelimitedList 字段。
from marshmallow import Schema, fields
from webargs import use_args
from webargs.fields import DelimitedList
class GenerationParamsSchema(Schema):
queue_id = fields.Integer(required=True)
include_ids = DelimitedList(fields.Integer(), required=False)
@queues.route('/generate_content', methods=['GET'])
@use_args(GenerationParamsSchema(strict=True))
def generate_content_count(generation_params):
...
但是,如果我使用 Flask 的 url_for 生成 URL,它会为每个值生成重复的键:
url_for('queues.generate', queue_id=4, include_ids=[1, 2, 3])
/queues/generate?queue_id=4&include_ids=1&include_ids=2&include_ids=3
用DelimitedList 字段解析它只会捕获第一个值。更改为 List 字段会再次正确捕获值。所以要么我的 Flask URL 失败,要么我的客户端 URL 失败。
我无法更改客户端生成 URL 的方式,因此我想坚持使用 DelimitedField 进行解析。如何让url_for 生成相同的样式?
【问题讨论】:
标签: python flask query-string marshmallow webargs