flask получает аргумент со специальным символом и пробелами в нем, используя URL

#python #flask

#python #flask

Вопрос:

Я использую URL-адрес flask для получения параметров спереди назад, чтобы передать его в запрос, и он отлично работает с простыми строками без каких-либо специальных символов или пробелов в нем. Однако, когда я передаю «Historic_data CBD_3 (10WAY_10.0mWx59.0mW: 28)», он не работает. (строка со специальным символом, например () . : и с пробелом)

Я запускаю его в Linux. Я протестировал его в Windows, и все было в порядке.

 front 
@app.route('/design/<string:des>')
callback
/design/Historic_Intersection CBD_3 (3WAY_6.0mWx5.0mW:10) 
 

Я думаю, что здесь проблема с кодировкой URL, есть предложения?

Ответ №1:

Смотрите quote и unquote в urllib.parse . https://docs.python.org/3/library/urllib.parse.html#urllib.parse.quote

В принципе, URL-адреса не могут содержать определенные символы (например, пробелы), поэтому, если ваш URL-адрес содержит один из этих плохих символов, он заменяется, что вы и наблюдаете. quote Функция принимает любую строку и выдает вам ее URL-версию. unquote Принимает версию URL и возвращает вам оригинал.

Если вам нужно сделать то же самое в параметрах запроса, quote_plus unquote_plus вместо этого используйте and .

Ответ №2:

Вместо этого, используя url pass, вы можете передать его с $.ajax({data: data})

 let data_to_back = "Historic_data CBD_3 (10WAY_10.0mWx59.0mW:28)"
$.ajax({
            type: 'GET',
            url: 'pass/design/',
            dataType: "json",
            data: data)}