EDIT2: я прошу прощения за отсутствие ясности.Я приведу несколько значений.Первый - это URL-адрес, который я вызываю с помощью моего веб-приложения.Второе значение перед вызовом urllib.unquote
.Третье - это значение после вызова urlib.unquote
.
внешний интерфейс:
console.log('http://localhost:8080/v1/' + encodeURIComponent(name))
внутренний:
def f(param=''):
print('*', param)
param = urllib.unquote(param)
print('**', param)
Пример.
http://localhost:8080/v1/https%3A%2F%2Fgoogle.com
* https:%2F%2Fgoogle.com
** https://google.com
Пример 2.
http://localhost:8080/v1/foo%2520bar
* foo%20bar
** foo bar
Пример 3.
http://localhost:8080/v1/foo%20bar
* foo bar
** foo bar
Спасибо, что проявили терпение и помогли мне с этим.Я прошу прощения за то, что был неясен в моем исходном сообщении.
РЕДАКТИРОВАТЬ: Короче говоря, если я вызываю /v1/%2520
, параметр равен " "
в конце функции, а не "%20"
, вначало функции равно "%20"
, а не "%2520"
.
В настоящее время я работаю над приложением Flask с использованием Python 2.7.
Я пытаюсь создать функциюкоторый может обрабатывать параметры URL.
@app.route('/v1/<param>', methods=['DELETE'])
def f(param=''):
param = urllib.unquote(param)
В моем приложении внешнего интерфейса я вызываю эту функцию, кодируя param
.Однако, если я передам "foo bar"
и "foo%20bar"
функции, param
будет преобразован в одно и то же значение - "foo bar"
, когда на самом деле "foo bar"
должно быть "foo bar"
, а "foo%20bar"
должно быть "foo%20bar"
.
Из-за этой ошибки я не могу удалить запись "foo%20bar"
.Если я попытаюсь удалить его, он удалит "foo bar"
, и после удаления "foo bar"
запись "foo%20bar"
никогда не будет удалена.
Я полагаю, это потому, что "%20"
не равно"%2520"
хотя это и есть парам.Когда я печатаю это значение перед вызовом urllib.unquote(param)
, оно уже равно "%20"
.Затем, когда я вызываю urllib.unquote(param)
, значение изменяется на " "
.
Я не совсем уверен, является ли это ошибкой в Flask / Werkzeug, но это приводит к тому, что мое приложение не работает.
У вас есть предложения по устранению этой проблемы?Спасибо!