2012-02-12 18 views
7

Próbuję wysłać żądanie POST w szablonie jinja w Flask. Jednak parametry są przekazywane domyślnie przez GET, a ta konkretna metoda akceptuje tylko żądania POST.Wystawianie żądania POST z url_for w Flask

Próbowałem określając _metodę, jak poniżej, ale nadal przekazuje parametr z GET zamiast POST.

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

(Komunikat o błędzie jest taka sama, czy nie mogę określić _method).

+0

Dzięki, nie wiedziałem o '_method' arg. – iurii

Odpowiedz

10

Wszystkie są połączenia GET. Nie możesz wymusić na POST.

Alternatywą byłoby to:

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

Musisz znaleźć dobry sposób, aby zmusić swój kod do ignorowania wysłania żądania GET.

+0

Hm, czy istnieje inny sposób robienia tego bez przekazywania informacji za pośrednictwem adresu URL, a następnie sposób w jaki robią to formularze? Nie jest to faktycznie forma per se w sposobie, w jaki jest prezentowana użytkownikowi, ale jest to ten sam pomysł (wybór przedstawiony użytkownikowi). – chimeracoder

+0

Nie można wysłać żądania 'POST' bez AJAX lub formularza, niestety. – Blender

2

Można utworzyć formularz zawierający tylko przycisk Wyślij lub wysłać POST za pomocą AJAX lub innych skryptów po stronie klienta. Z tego, co wiem, nie można utworzyć łącza wysyłającego POST.

0

Możesz dodać Middelway, która szuka argumentu GET, który nadpisuje metodę http. Spójrz tam: http://flask.pocoo.org/snippets/38/

Nowy link będzie wyglądał tak:

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