【问题标题】:Retrieving the url anchor in a werkzeug request在 werkzeug 请求中检索 url 锚点
【发布时间】:2011-11-27 16:43:03
【问题描述】:

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

我可以看到请求通过tcpdump 传入,但是当我查看 werkzeug 请求对象(例如 url() 或 base_url())时,我得到的只是/abc.def#ghi 已被删除。

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

【问题讨论】:

    标签: anchor flask werkzeug


    【解决方案1】:

    我遇到了同样的问题。 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
    

    如果您在 Werkzeug 内设法做到这一点,我很想知道如何做。

    【讨论】:

    • @Mu Mind - 肯定有更好、更简单的解决方案。这是肯定的。如果你知道一个,如果你在这里描述它,你将能够提供更多帮助。
    • 一个有趣的解决方案.. FB 不只是提供 access_token 作为 GET 参数一定是有原因的
    • 这里有同样的问题。该死的,脸书。我会坚持使用 response_type=code
    • 基于 trungly 的评论 - developers.facebook.com/docs/facebook-login/… - 在这种情况下,首选方法是请求代码而不是令牌,然后将其交换为服务器到服务器的令牌
    【解决方案2】:

    来自 Wikipedia (Fragment Identifier)(没有时间在 RFC 中查找):

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

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

    【讨论】:

      【解决方案3】:

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

      url_for('abc.def', _anchor='ghi')
      

      【讨论】:

      • 问题是关于传入请求而不是关于生成带有锚的 url,所以这不适用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 2010-10-20
      • 1970-01-01
      • 2015-08-15
      • 2013-05-03
      • 1970-01-01
      • 2021-05-02
      相关资源
      最近更新 更多