【问题标题】:Request GET parameters in Django在 Django 中请求 GET 参数
【发布时间】:2013-03-05 23:58:04
【问题描述】:

我有一个看起来像这样的传入请求,它来自第三方,所以它不在我的控制范围内。

/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,但我对请求对象的默认行为感到惊讶。以为它只用“&”划分参数。其他人看到这个或知道这是否应该发生?

【问题讨论】:

    标签: django http url request


    【解决方案1】:

    根据 W3,“;”实际上是 URI 的首选参数分隔符。

    http://www.w3.org/TR/html4/appendix/notes.html#h-B.2.2

    B.2.2 URI 属性值中的和号

    提交表单时构造的 URI 可以用作 锚样式链接(例如,A 元素的 href 属性)。 不幸的是,使用“&”字符来分隔表单域 与其在 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 实现者支持使用“;”代替“&”来保存作者 以这种方式转义“&”字符的麻烦。

    【讨论】:

    • 非常感谢,那就回答吧!供应商的分隔线选择不佳。
    • 分号作为分隔符由 Python's urlparse module 强制执行,Django 的 QueryDict 依赖于此。
    猜你喜欢
    • 2016-10-17
    • 2017-06-08
    • 2017-02-22
    • 2011-03-30
    • 1970-01-01
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多