Выполните запрос POST с помощью url_for во Flask - PullRequest
9 голосов
/ 12 февраля 2012

Я пытаюсь отправить запрос POST в шаблоне Jinja в Flask . Однако параметры по умолчанию передаются через GET, и этот конкретный метод принимает только запросы POST.

Я попытался указать _method, как показано ниже, но он все равно передает параметр с помощью GET вместо POST.

<li><a href = "{{ url_for('save_info', _method='POST', filepath=s.name ) }}"><div class="nodes">{{ s.title}} - {{ song.owner }}</div></a></li>

(Сообщение об ошибке одинаково независимо от того, * I я * 1011).

Ответы [ 3 ]

12 голосов
/ 12 февраля 2012

Все ссылки GET запросов.Вы не можете форсировать POST.

Альтернативой может быть следующее:

@app.route('/save_info/<filepath>', methods=['GET', 'POST'])
def save_info(filepath):
  if request.method == 'POST' or filepath:
    ...

Вам нужно будет найти хороший способ заставить ваш код игнорировать то, что вы отправилиGET запрос.

2 голосов
/ 12 февраля 2012

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

1 голос
/ 17 февраля 2012

Вы можете добавить Middelway, который ищет аргумент GET, который перезаписывает метод http. Смотрите там: http://flask.pocoo.org/snippets/38/

Ваша новая ссылка будет выглядеть так:

<li><a href = "{{ url_for('save_info', __METHOD_OVERRIDE__='POST', filepath=s.name ) }}"><div class="nodes">{{ s.title}} - {{ song.owner }}</div></a></li>
...