Нужно ли использовать методы = ['GET', 'POST'] в @ app.route ()? - PullRequest
0 голосов
/ 09 марта 2019

Мои формы отправляют параметр возраста через GET, и он работает только с этим:

@app.route("/foo")
def foo():
  age = request.args['age']

Я не заморачивался с

@app.route('/foo'<strong>, methods=['GET', 'POST']</strong>)

Это имеет значение?

Ответы [ 3 ]

3 голосов
/ 09 марта 2019

Неважно, в том смысле, что оно будет работать. Однако обычно вам бы хотелось, чтобы несколько функций выполняли разные вещи, например. POST в / foo означает, что вы добавляете элемент, GET в / foo означает, что вы извлекаете элемент (ы), а DELETE в / foo означает, что вы удалили элемент.

0 голосов
/ 09 марта 2019

Как всегда, ответ: это зависит.

Если вы не предоставите аргументы «method», Flask предполагает, что HTTP-метод - GET (и также принимает HEAD). Пока это предположение верно, ваш код будет работать нормально.

Если, однако, ваша веб-страница сообщается как метод POST (или DELETE и т. Д.), Flask завершится неудачно и сообщит, что запрос POST (или DELETE и т. Д.) Не разрешен.

Думайте об этом требовании как о проверке на избыточность. Flask мог быть написан для адаптации к любому методу, используемому в HTTP-запросе. Вместо этого Flask настаивает на том, чтобы вы указали метод в качестве сигнала о намеренной форме общения. Это требование делает реализацию Flask несколько проще за счет возложения ответственности за координацию интерфейса клиент-сервер на программиста.

0 голосов
/ 09 марта 2019

Если вы не указали аргумент methods для app.route(), то по умолчанию принимается только GET и HEAD запросы (*) .

Вам нужно явно установить methods, если вам нужно принять другие методы HTTP , например POST, в противном случае Flask ответит 405 Метод не разрешен HTTPКод ответа , когда клиент использует метод HTTP, который вы не перечислили, и ваша функция маршрута просто не вызывается.

Так что если ваш маршрут должен обрабатывать как GET, так иPOST запросов, но вы забыли добавить methods=['GET', 'POST'] к @route(), тогда вы получите ошибку, так как POST запросов приведут к ответу 405 вместо вашего маршрута, обрабатывающего запрос.

В вашем случаеоднако вы должны , а не использовать methods=['GET', 'POST'], и вместо этого позволить клиентам, которые все равно пытаются использовать POST, знать, что ваш маршрут не обрабатывает этот метод.Лучше быть явно об ошибке, чем позволить ей молча пройти.


(*) HEAD добавляется всякий раз, когда вы используете регистрацию маршрута, который обрабатывает GET, и вв случае запроса HEAD ваш маршрут вызывается, и клиенту затем передаются только заголовки.Колба автоматически обрабатывает для вас OPTIONS, в этом случае маршрут не вызывается.

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