EDIT2:对于缺乏清晰度,我深表歉意。
我将提供几个值。第一个是我使用前端应用程序调用的 URL。第二个是调用前的值urllib.unquote
。第三个是调用后的值urlib.unquote
.
前端:
console.log('http://localhost:8080/v1/' + encodeURIComponent(name))
backend:
def f(param=''):
print('*', param)
param = urllib.unquote(param)
print('**', param)
Ex.
http://localhost:8080/v1/https%3A%2F%2Fgoogle.com
* https:%2F%2Fgoogle.com
** https://google.com
Ex2.
http://localhost:8080/v1/foo%2520bar
* foo%20bar
** foo bar
Ex3.
http://localhost:8080/v1/foo%20bar
* foo bar
** foo bar
感谢您对此的耐心和帮助。对于我原来的帖子中不清楚的地方,我深表歉意。
编辑:简而言之,如果我打电话/v1/%2520
,参数等于" "
在函数末尾,而不是"%20"
,在函数的开头它等于"%20"
并不是"%2520"
.
我目前正在使用 Python 2.7 开发 Flask 应用程序。
我正在尝试创建一个可以处理 URL 参数的函数。
@app.route('/v1/<param>', methods=['DELETE'])
def f(param=''):
param = urllib.unquote(param)
在我的前端应用程序中,我通过编码来调用此函数param
。但是,如果我通过"foo bar"
and "foo%20bar"
对于函数来说,param
被解析为相同的值——"foo bar"
,当真的"foo bar"
应该"foo bar"
and "foo%20bar"
应该"foo%20bar"
.
由于这个错误,我无法删除"foo%20bar"
入口。如果我尝试删除它,它就会删除"foo bar"
,还有一次"foo bar"
被删除时,"foo%20bar"
条目永远不会被删除。
我相信这是因为"%20"
不等于"%2520"
即使这就是参数。当我在调用之前打印这个值时urllib.unquote(param)
它已经等于"%20"
。然后,当我打电话时urllib.unquote(param)
该值更改为" "
.
我不太确定这是否是 Flask/Werkzeug 中的错误,但它导致我的应用程序无法工作。
您对解决这个问题有什么建议吗?谢谢!