【问题标题】:Django - Get raw request pathDjango - 获取原始请求路径
【发布时间】:2020-06-09 17:06:54
【问题描述】:

如何在 Django 中获取原始请求路径(主机名和端口之后的所有内容)?

我尝试了request.get_full_path(),但它不适用于某些 URL。

例如,当 URL 为http://localhost:8000/data/? 时,结果为/data/ 而不是/data/?

我知道服务器收到完整的字符串,因为它在终端中显示"GET /data/? HTTP/1.1" 200 642

【问题讨论】:

    标签: django


    【解决方案1】:

    访问原始 URL 取决于您的设置。我不知道用 Django 的开发服务器可以做到这一点。

    HTTPRequest.META is described as follows:

    包含所有可用 HTTP 标头的字典。 可用的标头取决于客户端和服务器,但这里有一些示例:

    如果您正在运行 gunicornrequest.META["RAW_URI"] 可能会满足您的需求。

    【讨论】:

      【解决方案2】:

      你可以使用request.build_absolute_uri()

      取决于源代码:

      根据位置和可用变量构建绝对 URI 这个请求。如果未指定 location,则绝对 URI 为 基于request.get_full_path()。无论如何,如果位置是 绝对的,它只是简单地转换为符合 RFC 3987 的 URI 和 返回并且如果位置是相对的或者是相对于方案的(即, //example.com/),它被 urljoined 到一个由 请求变量。

      【讨论】:

      • 不幸的是,request.build_absolute_uri() 内部调用了request.get_full_path()。这是source code for reference。我想要的是 raw 路径,甚至是 raw URI(如您所建议的),因为它们可以相互派生。
      • 哪些url取不到数据?
      • 有一个案例在原始问题中不起作用:http://localhost:8000/data/?
      • 好的,我试过了。我认为只有?标记不显示。当我在附近添加一些文字时?标记,它返回 get_full_path() 和 build_absolute_uri() 方法。
      猜你喜欢
      • 2022-06-17
      • 2010-11-02
      • 2016-11-16
      • 2010-11-13
      • 2011-06-26
      • 2014-09-30
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      相关资源
      最近更新 更多