Для понимания маршрутизации в колбе (werkzeug).Отложите на секунду кодирование, которое вы использовали в JavaScript.
Шаблон регулярного выражения, используемый конвертером path
werkzeug, равен [^/].*?
.Это позволяет любое количество /
в пути URL.Это означает, что только part1 get_data/<path:par1>
может принимать как get_data/Clothes/Bottoms
, так и get_data/Clothes/Bottoms/Pants/Jeans
.
. Вы используете два преобразователя path
в part1 и par2, что плохо, так как одна part1 может принять весь слеш.
Теперь другой вопрос.почему даже после кодирования URL-адрес не работает должным образом .
Flask использует WSGI-сервер Werkzeug по умолчанию.И библиотека WSGI освобождает URI перед использованием его для маршрутизации.то есть get_data/Clothes%2FBottoms
преобразуется в get_data/Clothes/Bottoms
, когда речь идет о маршрутизации.в вашем случае маршрутизатор получает get_data/Clothes/Bottoms/Pants/Jeans
, здесь он принимает «Одежда» как часть 1 и отдых как часть 2.
См. вопрос с колбой относительно этого.
Решение
Двойной побег в JavaScript может быть здесь.Преобразователь path
также можно заменить на string
.
par1 = encodeURIComponent(encodeURIComponent(parameter1));
par2 = encodeURIComponent(encodeURIComponent(parameter2));
$.ajax({
type:'post',
url:'http://localhost:8000/get_data'+'/'+par1+'/'+par2+'/'});
И декодировать в колбу, чтобы вернуть свои строки
from urllib import unquote_plus
@app.route('/get_data/<string:par1>/<string:par2>/',methods=['GET','POST'])
def get_data(par1, par2):
print unquote_plus(par1), unquote_plus(par1)