Подтвердить что ты не робот

Выполнять запрос POST при перенаправлении в колбе

Я работаю с колбой. Я в ситуации, когда мне нужно перенаправить почтовый запрос на другой URL-адрес, сохраняя метод запроса, т.е. Метод "POST" . Когда я перенаправил запрос "GET" на другой URL-адрес, который принимает метод запроса "GET" , это хорошо. Вот пример кода, с которым я пытаюсь использовать выше.

@app.route('/start',methods=['POST'])
def start():
    flask.redirect(flask.url_for('operation'))

@app.route('/operation',methods=['POST'])
def operation():
    return "My Response"

Я хочу сделать запрос "POST" на "/start" url, который внутри также выполняет запрос "POST" на url "/operation". Если я изменю код так, как это,

@app.route('/operation',methods=['GET'])
def operation():
    return "My Response"

код отлично работает для запроса "GET" . Но я хочу также получить запрос POST.

4b9b3361

Ответ 1

Функция redirect, предоставленная в Flask, по умолчанию отправляет клиенту код состояния 302 и, как указано в Wikipedia:

Многие веб-браузеры реализовали этот код таким образом, который нарушил этот стандарт, изменив тип запроса нового запроса GET, независимо от типа, используемого в оригинале запрос (например, POST). [1] По этой причине HTTP/1.1 (RFC 2616) добавил новые коды статуса 303 и 307, чтобы устранить двусмысленность между двумя типами поведения, с 303 мандатом на изменение тип запроса в GET и 307, сохраняющий тип запроса, который был первоначально отправлен.

Итак, отправка кода статуса 307 вместо 302 должна указывать браузеру сохранить использованный метод HTTP и, следовательно, иметь поведение, которое вы ожидаете. Ваш вызов redirect будет выглядеть следующим образом:

flask.redirect(flask.url_for('operation'), code=307)