如何自动解析参数

时间:2015-03-23 03:59:55

标签: python flask

URL请求格式可能是

http://SERVER/search/categories=Macrohistory&name=Cotton,Gasoline

然后我想将params存储为以下Hash结构。

{
"categories" => ["Macrohistory"],
"name" => ["Cotton","Gasoline"]
}

这是一个类似的请求。

http://SERVER/search/tag=Taiwan,China&name=Cotton,Gasoline

{
"tag" => ["Taiwan", "China"],
"name" => ["Cotton","Gasoline"]
}

是否有任何内置或推荐的软件包可以获得我的预期结果?

我可以手动编写解析器,

但我不想重建轮子,

如果有更好的解决方案,谢谢。

烧瓶法

@app.route("/search/<string:parameters>")
@return_json
def search():

1 个答案:

答案 0 :(得分:2)

在网址中,name=value元素通常作为查询字符串的一部分输入,该字符串会在&#39;?&#39;之后添加到网址的末尾。这会将您的网址更改为

http://SERVER/search/?categories=Macrohistory&name=Cotton,Gasoline

通过此更改,以下代码几乎可以为您提供所需的输出:

>>> import urlparse
>>> s = "http://SERVER/search/?categories=Macrohistory&name=Cotton,Gasoline"
>>> urlparse.urlparse(s)
ParseResult(scheme='http', netloc='SERVER', path='/search/', params='', query='categories=Macrohistory&name=Cotton,Gasoline', fragment='')
>>> urlparse.parse_qs(urlparse.urlparse(s).query)
{'name': ['Cotton,Gasoline'], 'categories': ['Macrohistory']}

获得&#34; Cotton&#34;和&#34;汽油&#34;作为值&#34; name&#34;的两个单独的列表元素,它们需要在URL中单独输入:

>>> s = "http://SERVER/search/?categories=Macrohistory&name=Cotton&name=Gasoline"
>>> urlparse.parse_qs(urlparse.urlparse(s).query)
{'name': ['Cotton', 'Gasoline'], 'categories': ['Macrohistory']}