Если у меня есть два маршрута в flask, указывающие на один и тот же URL, как flask решает, какие функции запускать? - PullRequest
0 голосов
/ 22 марта 2020

У меня есть простое приложение flask, в котором я беру путь к файлу изображения со страницы ввода, а затем переключаюсь на страницу вывода с отображаемым изображением. Мое приложение работает правильно и управляет доступом к моим сохраненным файлам и отображает их на новой странице, но я понял, что у меня есть два маршрута, которые указывают на одно и то же место. Мой код показан ниже:

@app.route('/')
def main_page():
    return render_template('input_receiver.html')

@app.route('/', methods = ['POST', 'GET'])
def get_input():
    if request.method == 'POST':
        user = request.form['nm']
        return redirect(url_for('success', name=user))

Эти две функции указывают на мой начальный локальный хост: страница 5000, первая функция отображает файл html с вводом текстового поля и кнопкой. Чтобы подключиться к реальному сценарию flask, он включает в себя следующую строку в теге формы:

<form action = "http://localhost:5000" method = "post">

(«nm» - это текстовое поле, вводимое в начальном *) 1018 * стр.)

Вторая функция принимает пользовательский ввод пути к локальному файлу изображения и перенаправляет их в файл HTML после нажатия кнопки, которая отображает введенное изображение. Это делается с помощью функции ниже.

@app.route('/<name>')
def success(name):
    return render_template('popup.html', picture_path = "/static/" + name)

Оба маршрута указывают на начальный локальный хост: 5000 страниц, так как же flask обрабатывает выполнение? Если это считается плохим способом создания такого рода функциональности, каков лучший способ сделать это?

1 Ответ

0 голосов
/ 22 марта 2020

Вы можете поместить и GET, и POST в один и тот же метод под одним и тем же route.

@app.route('/', methods = ['POST', 'GET'])
def get_input():
    if request.method == 'POST':
        user = request.form['nm']
        return redirect(url_for('success', name=user))
    return render_template('input_receiver.html')

Вы уже указали методы как GET и POST для маршрута / - метод get_input(), так что вы можете полностью удалить другой метод - main_page.

И ваш GET, и POST запрос могут быть обработаны одним этим методом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...