如何解析通过POST收到的application/x-www-form-urlencoded

hac*_*man 7 python django json

我正在编写一个django webhook,用于通过POST我认为的application/x-www-form-urlencoded格式发送数据的服务.示例POST如下:

POST id=a5f3ca18-2935-11e7-ad46-08002720e7b4
 &originator=1123456789
 &recipient=1987654321
 &subject=MMS+reply
 &body=View+our+logo
 &mediaUrls[0]=https://storage.googleapis.com/mms-assets/20170424/a0b40b77-30f8-4603-adf1-00be9321885b-messagebird.png
 &mediaContentTypes[0]=image/png
 &createdDatetime=2017-04-24T20:15:30+00:00
Run Code Online (Sandbox Code Playgroud)

我理解如何解析,json但我之前没有遇到过这种格式.似乎没有任何有用的教程如何处理此通过POST.我被困在这一点,所以非常感谢帮助.

tos*_*osh 10

Python 2:

>>> from urlparse import parse_qs
>>> parse_qs('foo=spam&bar=answer&bar=42')
{'foo': ['spam'], 'bar': ['answer', '42']}
Run Code Online (Sandbox Code Playgroud)

Python 3:

>>> from urllib.parse import parse_qs
>>> parse_qs('foo=spam&bar=answer&bar=42')
{'foo': ['spam'], 'bar': ['answer', '42']}
Run Code Online (Sandbox Code Playgroud)

两个python 2/3:

>>> from six.moves.urllib.parse import parse_qs
Run Code Online (Sandbox Code Playgroud)

UPD

还有parse_qsl一个函数可以返回两项元组的列表,比如

>>> parse_qsl('foo=spam&bar=answer&bar=42')
[('foo', 'spam'), ('bar', 'answer'), ('bar', '42')]
Run Code Online (Sandbox Code Playgroud)

它非常适合将这样的列表传递给dict()构造函数,这意味着你得到的每个名称只有一个值的dict.请注意,姓氏/值对优先于同名的早期出现(请参阅库引用中的dict).