在werkzeug请求中检索url锚点

时间:2011-09-29 12:52:47

标签: anchor flask werkzeug

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

我可以通过tcpdump看到请求进入,但是当我查看werkzeug请求对象(例如url()或base_url())时,我得到的所有内容都是{{1} }。 /abc.def已被删除。

是否有一个方法可以返回此信息,或者我是否必须将Request子句自行处理?如果是这样,有没有一个例子可以作为灵感来使用?

3 个答案:

答案 0 :(得分:12)

我遇到了同样的问题。 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内做这件事,我很想知道如何做。

答案 1 :(得分:12)

来自维基百科(Fragment Identifier)(没有时间在RFC中找到它):

  

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

所以Flask - 或任何其他框架 - 无法访问#ghi

答案 2 :(得分:3)

您可以使用flask.url_for _anchor关键字参数执行此操作:

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