9

我有一个 DAV 协议,它将带外数据存储在 url 锚点中,例如ghiin DELETE /abc.def#ghi。服务器是一个 Flask 应用程序。

tcpdump我可以看到请求通过/abc.def. 已#ghi被剥离。

是否有返回此信息的方法,或者我是否必须将 Request 子类化才能自己处理?如果是这样,有没有我可以作为灵感的例子?

4

3 回答 3

14

我遇到了同样的问题。Facebook 身份验证 API 返回附加到重定向 url 的哈希后面的访问令牌。同样,Flask 的 request.url 将 URL 中的所有内容都放在哈希符号后面。

我也在使用 Flask,所以我认为您可以使用我的蛮力解决方法,使用 Javascript 的 window.location.href 来获取完整的 URL。然后,我刚刚提取了我需要的部分(访问令牌),将其放入重定向 URL 中,我可以将访问令牌作为参数传递给接收视图函数。这是代码:

@app.route('/app_response/<response>', methods=['GET'])
def app_response_code(response):
    return '''  <script type="text/javascript">
                var token = window.location.href.split("access_token=")[1]; 
                window.location = "/app_response_token/" + token;
            </script> '''

@app.route('/app_response_token/<token>/', methods=['GET'])
def app_response_token(token):
    return token

如果您设法(d)在 Werkzeug 中执行此操作,我很想知道如何做。

于 2011-10-23T15:07:43.810 回答
14

来自维基百科(片段标识符)(没有时间在 RFC 中找到它):

片段标识符的功能与 URI 的其余部分不同:即,它的处理完全是客户端,没有服务器参与

因此 Flask - 或任何其他框架 - 无法访问#ghi.

于 2013-02-11T09:52:05.847 回答
2

您可以使用flask.url_for_anchor关键字参数来做到这一点:

url_for('abc.def', _anchor='ghi')
于 2014-11-18T07:36:20.300 回答