Flask неправильно воспринимает вопросительный знак (?) в route

Столкнулся со странной ошибкой Flask при написании route. Код программы:

from flask import Flask
app = Flask(__name__)
@app.route('/xmlhttprequest?account-id=<int:id>')
def main(id):
    if id == 1:
        return 'account john'
    else:
        return 'account not found'

if __name__ == '__main__':
    app.run(debug=True)

Мы видим, что в route прописан вопросительный знак, перейдя по ссылке http://127.0.0.1:5000:5000/xmlhttprequest?account-id=1, получаем ошибку Not Found The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.

Убрав в route вопросительный знак, (@app.route('/xmlhttprequestaccount-id=<int:id>')), оставив остальную часть программы в том же состоянии, перейдя по ссылке http://127.0.0.1:5000:5000/xmlhttprequestaccount-id=1, получим желаемый ответ account john. Подскажите, как нужно действовать правильно.


Ответы (2 шт):

Автор решения: Andrew Holovko

Так как вы сделали - не совсем правильно. Как вариант вы можете использовать: Flask URL Converters

Для этого измените ваш роутер:

@app.route('/xmlhttprequest/<int:id>')

И далее обращайтесь к нему по:

http://127.0.0.1:5000:5000/xmlhttprequest/1

→ Ссылка
Автор решения: insolor

С точки зрения Flask, все что идет после вопросительного знака - это не часть пути, а параметры запроса. Нужно получать переданный account-id из request.args:

from flask import Flask, request

app = Flask(__name__)


@app.route('/xmlhttprequest')
def main():
    account_id = request.args.get('account-id', type=int)
    if account_id == 1:
        return 'account john'
    else:
        return 'account not found'


if __name__ == '__main__':
    app.run(debug=True)
→ Ссылка