2013-10-24 17 views
5

Sto provando a pubblicare dati tramite il mio front-end e l'app del pallone lancia 400 richieste errate. Tuttavia, se sto facendo lo stesso utilizzando la chiamata Curl, sembra funzionare bene. Non so cosa mi manca nella forma.La registrazione di dati su Flask tramite modulo sta dando 400 Bad Request

Quello che segue è il mio codice forma

<script> 
function sub() { 
    console.log('sub function'); 
    $("#fquery").submit(); 
} 
</script> 
<form id="form1" action="/final" method="post"> 
<input id='query' type="text"> 
    <button type="submit" onClick='sub()'>Submit &raquo;</button> 
</form> 

Al lato server:

@app.route('/final',methods=['POST','GET']) 
def message(): 
    if request.method == 'POST': 
     app.logger.debug(" entered message function"+ request.form['query']) 
     q = request.form['query'] 
    return render_template('final.html',query=q,result="Core_Table Output") 

Il lato server sembra che vada bene a me. Dal momento che sto ottenendo risposta per la richiesta ricciolo

curl http://localhost:8000/final -d "query=select starct st blah blah" -X POST -v 
* Trying 127.0.0.1... connected 
> POST /gc HTTP/1.1 
> User-Agent: curl/7.22.0 (i686-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3 
> Host: localhost:8000 
> Accept: */* 
> Content-Length: 41 
> Content-Type: application/x-www-form-urlencoded 
> 
* upload completely sent off: 41out of 41 bytes 
* HTTP 1.0, assume close after body 
< HTTP/1.0 200 OK 
< Content-Type: text/html; charset=utf-8 
< Content-Length: 1961 
< Server: Werkzeug/0.9.4 Python/2.7.3 
< Date: Thu, 24 Oct 2013 23:33:12 GMT 
+0

Che cos'è '# fquery'? Vedo solo '# form1' e' # query' nel tuo snippet di codice. –

+0

scusa, ho dimenticato di cambiarlo. Solo la sua forma1. – Rahul

+0

possibile duplicato di [Qual è la causa dell'errore di richiesta errata durante l'invio del modulo nell'applicazione Flask?] (Http://stackoverflow.com/questions/14105452/questo-è-la-fodera-di-la-bad-request -error-when-submitting-form-in-flask-application) –

risposta

19

Ah, mi sembra di vedere che: È possibile impostare solo la id ma non il name per l'elemento input. Tuttavia, lo name viene utilizzato nei dati del modulo inviati al server. Ciò causa un KeyError a request.form['query'] che causa l'errore 400.

+1

oh dio. Sapevo che questo sarebbe risultato molto banale. Purtroppo, non ho potuto trovare la documentazione per lo stesso. – Rahul

+0

Errore * flask 400 *, aprire [Quickstart Flask] (http://flask.pocoo.org/docs/quickstart/) e Strg + F 400. ;-) –

+0

L'ho fatto per un po '... prima di ricorrere a #SO – Rahul

1

Oltre a ciò che @Robin Krahl ha detto, è inoltre necessario aggiungere enctype="multipart/form-data" nel modulo. Quindi il codice può essere il seguente:

<form id="form1" action="/final" method="post" enctype="multipart/form-data"> 
    <input id='query' type="text"> 
    <button type="submit" onClick='sub()'>Submit &raquo;</button> 
</form>" 
Problemi correlati