【问题标题】:Django URL pattern to include a #Django URL 模式以包含 #
【发布时间】:2015-04-21 17:50:58
【问题描述】:

我在使 URL 模式正常工作时遇到问题。

网址格式如下:

/API#access_token=<string>&expires_in=<timestamp>

很遗憾,我无法更改 #access_token=&expires_in= 部分,因为这超出了我的控制范围,我只需要让我的代码工作。

我尝试了许多不同的模式,其中一些概述如下。这是我的第一个 Django 项目,任何建议和指针将不胜感激。

url(r'^API#access_token=(?P<token_info>\w+)&expires_in(?P<time>\d+)$'
url(r'^API#(?P<tokens>\w+)$'
url(r'^API/#(?P<tokens>\w+)&(?P<expiration>\d+)$'

【问题讨论】:

  • 你确定你没有把#?混在一起吗?
  • @Andrew_Lvov 绝对不会混淆#

标签: python django url-pattern


【解决方案1】:

问题在于锚点#(也称为片段标识符)不是由浏览器发送到服务器的。正则表达式无法捕获不存在的内容。来自wikipedia article on the fragment identifier

片段标识符的功能与其余部分不同 URI:即它的处理完全是客户端,没有 来自网络服务器的参与——当然通常是服务器 有助于确定 MIME 类型,而 MIME 类型确定 碎片的处理。当代理(例如 Web 浏览器) 从 Web 服务器请求 Web 资源,代理将 URI 发送到 服务器,但不发送片段。相反,代理等待 服务器发送资源,然后代理处理 资源根据文档类型和片段值。

解决这个问题的唯一方法是在客户端用 JavaScript 解析片段并将其作为单独的异步请求发送。对于 GET 请求,您可以将片段作为查询参数发送(在去除哈希后)或将其作为自定义值放入标头中。

【讨论】:

  • 有没有办法让浏览器在 HTML 加载后将其发送回服务器?即先加载页面,浏览器读取URL,然后将fragment发回?
  • 是的,您可以解析客户端并发送单独的 AJAX 请求。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
  • 2012-05-12
  • 2017-05-08
  • 2018-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多