我有一个DAV协议,用于在网址锚点中存储带外数据,例如ghi
中的DELETE /abc.def#ghi
。该服务器是Flask应用程序。
我可以通过tcpdump
看到请求进入,但是当我查看werkzeug请求对象(例如url()或base_url())时,我得到的所有内容都是{{1} }。 /abc.def
已被删除。
是否有一个方法可以返回此信息,或者我是否必须将Request子句自行处理?如果是这样,有没有一个例子可以作为灵感来使用?
答案 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')