2013-03-18 14 views
20

Sto lavorando con il pallone. Sono in una situazione in cui ho bisogno di reindirizzare una richiesta di posta a un altro url preservando il metodo di richiesta, ad esempio il metodo "POST". Quando ho reindirizzato una richiesta "GET" a un altro url che accetta il metodo di richiesta "GET" va bene. Ecco il codice di esempio con il quale sto cercando di cui sopra ..Effettuare una richiesta POST durante il reindirizzamento nel pallone

@app.route('/start',methods=['POST']) 
def start(): 
    flask.redirect(flask.url_for('operation')) 

@app.route('/operation',methods=['POST']) 
def operation(): 
    return "My Response" 

Voglio fare una richiesta "POST" a "/ start" url che internamente fa anche una richiesta "POST" a "/ funzionamento" url.Se modifico il codice come questo,

@app.route('/operation',methods=['GET']) 
def operation(): 
    return "My Response" 

codice funziona bene per la richiesta "GET". Ma voglio essere in grado di fare anche la richiesta POST.

risposta

53

La funzione redirect fornite in Flask invia un codice 302 di stato per il client di default, e Come citato sul Wikipedia:

Molti browser web implementati questo codice in un modo che ha violato questo standard, cambiando il richiedere il tipo della nuova richiesta a GET, indipendentemente dal tipo utilizzato nella richiesta originale (ad esempio POST). [1] Per questo motivo, HTTP/1.1 (RFC 2616) ha aggiunto i nuovi codici di stato 303 e 307 per disambiguare tra i due comportamenti, con 303 che richiede la modifica del tipo di richiesta a GET e 307 mantenendo il tipo di richiesta come originariamente inviato.

Quindi, l'invio di 307 codice di stato anziché 302 dovrebbe dire al browser di conservare il metodo HTTP utilizzato e quindi avere il comportamento che ci si aspetta. La tua chiamata a redirect sarebbe quindi simile a questa:

flask.redirect(flask.url_for('operation'), code=307) 
+1

Grazie per il suggerimento esatto! (arco) ancora io supplico suggerimento di una fonte dove posso imparare la fiaschetta in profondità. Voglio imparare cose del genere "correlate al codice". Penso che quelle cose siano fondamentali. Grazie ancora una volta :) – ln2khanal

+1

Bene, su questo punto specifico, penso che nessun documento avrebbe potuto aiutarti, anche se osservando la firma della funzione 'redirect', visto che invia 302 codici potrebbe averti messo in cammino. In caso contrario, per quanto riguarda l'API di 'Flask', non c'è niente di meglio della [documentazione] ufficiale (http://flask.pocoo.org/docs/). D'altra parte, se vuoi esempi più approfonditi, puoi guardare [The Flask Mega-Tutorial] (http://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-i- ciao-mondo) che mostra come eseguire molti compiti del mondo reale. – MatToufoutu

+0

Se stai inviando dati nella tua richiesta di posta che deve anche essere reindirizzato a quell'altra pagina, assicurati di accedervi nella funzione della nuova vista usando 'request.form [""]' dove proprietà è il nome del dati che stai inviando, come "username". – OzzyTheGiant

Problemi correlati