2012-02-12 16 views
7

Estoy tratando de emitir una solicitud POST dentro de una plantilla jinja en Flask. Sin embargo, los parámetros se pasan a través de GET de forma predeterminada, y este método en particular solo acepta solicitudes POST.Emita una solicitud POST con url_for en Flask

He intentado especificar _method, como se muestra a continuación, pero todavía pasa el parámetro con GET en lugar de POST.

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

(El mensaje de error es el mismo independientemente de que especifique _method).

+0

Gracias, no sabía sobre '_method' arg. – iurii

Respuesta

10

Todos los enlaces son GET solicitudes. No puede forzar un POST.

Una alternativa sería la siguiente:

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

Vas a tener que encontrar una buena manera de forzar su código de ignorar que ha enviado una solicitud GET.

+0

Hm, ¿hay alguna otra forma de hacerlo sin pasar la información a través de la URL, entonces, la forma en que lo hacen? Esto no es realmente una forma per se en la forma en que se presenta al usuario, pero es la misma idea (una selección presentada al usuario). – chimeracoder

+0

No se puede enviar una solicitud 'POST' sin AJAX o un formulario, lamentablemente. – Blender

2

Puede crear un formulario que contenga solo un botón de envío o enviar el mensaje POST utilizando AJAX u otras secuencias de comandos del lado del cliente. Por lo que sé, no puedes hacer que un enlace envíe un POST.

0

Puede agregar un Middelway que busque un argumento GET que sobrescriba el método http. Mira allí: http://flask.pocoo.org/snippets/38/

Su nuevo enlace se verá así:

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