Flask-restful:如何将多值参数传递给GET请求?

时间:2015-10-21 21:28:15

标签: python flask flask-restful

根据documentation,这足以传递多值。

def __init__(self):
        super(LatestNewsAPI, self).__init__()
        self.req_parser = reqparse.RequestParser()
        self.req_parser.add_argument('date', type=str)
        self.req_parser.add_argument('media', action='append')

我试图将两种媒体附加到列表中:

    rss_date_time = parser.parse('Tue, 15 Jan 2015 18:13:00 GMT')
    param = {'date': rss_date_time, 'media': 'GRD', 'media': 'IND'}
    url = '/api/v1.0/latest_news/?{0}'.format(urllib.urlencode(param))
    rv = self.client.get(url, headers={},
                         environ_base={'REMOTE_ADDR': '127.0.0.1'})

然而,一旦我到达那里:

def get(self):
    args = self.req_parser.parse_args()
    date_str = args['date']
    date_time = parser.parse(date_str)
    media = args['media']

媒体仅包含[u'IND']

我错过了什么?

2 个答案:

答案 0 :(得分:0)

您应该使用数组:

 param = {'date': rss_date_time, 'media[]': ['GRD', 'IND']}

在Python中,它们实际上称为list

编辑:

同样,你应该使用

media = args['media[]']

而不是接收方。

答案 1 :(得分:0)

在这种情况下,它实际上是一个urllib问题:

我必须添加的是doseq=True

url = '/api/v1.0/latest_news/?{0}'.format(urllib.urlencode(param, doseq=True))

并将params更改为列表:

param = {'date': rss_date_time, 'media': ['GRD', 'IND']}

现在我得到[u'GRD', u'IND']