2012-02-12 16 views
7

Sto tentando di inviare una richiesta POST all'interno di un modello jinja in Flask. Tuttavia, i parametri vengono passati tramite GET per impostazione predefinita e questo particolare metodo accetta solo le richieste POST.Emettere una richiesta POST con url_for in Flask

Ho provato a specificare _method, come di seguito, ma ancora passa il parametro con GET invece di POST.

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

(Il messaggio di errore è lo stesso sia che si specifichi _method).

+0

Grazie, non sapeva di '_method' arg. – iurii

risposta

10

Tutti i collegamenti sono richieste GET. Non puoi forzare un POST.

Un'alternativa sarebbe questo:

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

Dovrete trovare un bel modo per forzare il codice di ignorare che hai inviato una richiesta GET.

+0

Hm, c'è un altro modo per farlo senza passare le informazioni attraverso l'URL, quindi, come fanno le forme? Questo non è in realtà una forma per sé nel modo in cui viene presentato all'utente, ma è la stessa idea (una selezione presentata all'utente). – chimeracoder

+0

Non è possibile inviare una richiesta 'POST' senza AJAX o un modulo, purtroppo. – Blender

2

È possibile creare un modulo che contenga solo un pulsante di invio o inviare il POST utilizzando AJAX o altri script sul lato client. Per quanto ne so, non puoi fare in modo che un link invii un POST.

0

È possibile aggiungere un Middelway che ricerca un argomento GET che sovrascrive il metodo http. Guarda là: http://flask.pocoo.org/snippets/38/

vostro nuovo collegamento sarà simile a questa:

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