2012-02-12 3 views
7

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

Я пробовал задавать _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> 

(Сообщение об ошибке то же самое, независимо от того, указываю ли я метод).

+0

Спасибо, не знал о '_method' Arg. – iurii

ответ

10

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

Альтернативой было бы это:

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

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

+0

Хм, есть ли другой способ сделать это, не передавая информацию через URL-адрес, тогда как это делают формы? На самом деле это не форма, как она представлена ​​пользователю, но это та же идея (выбор, представленный пользователю). – chimeracoder

+0

Вы не можете отправить запрос «POST» без AJAX или формы, к сожалению. – Blender

2

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

0

Вы можете добавить 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> 
Смежные вопросы