在Django中请求GET参数
问题描述:
我有一个看起来像这样的传入请求,它来自第三部分,所以它不在我的手中。在Django中请求GET参数
/external/endpoint?PRN=1234567&INPUT=1111;ABCDEF&CUSTOMER=555454545
当我打印request.GET
请求参数,这是我所得到的。 INPUT
参数被切成两个不同的参数。
Incoming dict: {u'INPUT': [u'1111'], u'ABCDEF': [u''],u'CUSTOMER': [u'555454545'], u'PRN': [u'1234567']}
我可以砍请求URL自己,但我被请求对象的默认行为感到惊讶。认为它只用“&”来划分参数。任何人看到这个或知道这是否应该发生?
答
根据W3,“;”实际上是URI的首选参数分隔符。
http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2
B.2.2&符号在URI的属性值,其被构造时提交表单可以被用作一个 锚式链接(例如,href属性为
的URI A元素)。 不幸的是,使用“&”字符来分隔表单域 与它在SGML属性值中的使用交互以限定字符 实体引用。例如,要使用URI
http://host/?x=1&y=2
作为链接URI,它必须写入<A href="http://host/?x=1&y=2">
或<A href="http://host/?x=1&y=2">
。我们建议HTTP服务器实现者,特别是CGI 实现者支持使用“;”代替“&”以保存作者 以这种方式转义“&”字符的麻烦。
非常感谢,那就回答吧!提供商的分隔器选择不当。 – Gesias 2013-03-06 00:03:53
作为分隔符的分号由[Django的QueryDict所依赖的[Python的urlparse模块](http://docs.python.org/2/library/urlparse.html#urlparse.parse_qs)执行。 – OregonTrail 2013-03-06 05:18:47