2013-10-24 8 views
5

दे रहा है मैं अपने फ्रंट एंड के माध्यम से डेटा पोस्ट करने की कोशिश कर रहा हूं और फ्लास्क ऐप 400 खराब अनुरोध फेंक रहा है। हालांकि अगर मैं कर्ल कॉल का उपयोग कर ऐसा कर रहा हूं तो यह ठीक काम करता प्रतीत होता है। मुझे नहीं पता कि मैं इस रूप में क्या खो रहा हूं।फॉर्म के माध्यम से फ्लास्क पर डेटा पोस्ट करना 400 खराब अनुरोध

@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") 

सर्वर साइड मेरे लिए ठीक लग रहा है:

निम्नलिखित मेरी प्रपत्र कोड

<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> 

सर्वर साइड पर है। जब से मैं कर्ल अनुरोध

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

'# fquery' क्या है? मैं आपके कोड स्निपेट में केवल '# form1' और '# query' देखता हूं। –

+0

क्षमा करें इसे बदलने के लिए भूल गए। इसका फॉर्म 1 केवल। – Rahul

+0

संभावित डुप्लिकेट [फ्लास्क एप्लिकेशन में फ़ॉर्म जमा करते समय खराब अनुरोध त्रुटि का कारण क्या है?] (Http://stackoverflow.com/questions/14105452/what-is-the-cause-of-the-bad-request आतंक-कब-सबमिट-फॉर्म-इन-फ्लास्क-एप्लाका) –

उत्तर

19

आह के लिए प्रतिक्रिया हो रही है, मुझे लगता है कि मैं इसे देखना: आप केवल id नहीं बल्कि input तत्व के लिए name निर्धारित किया है। फिर भी name सर्वर पर भेजे गए फ़ॉर्म डेटा में उपयोग किया जाता है। इससे KeyErrorrequest.form['query'] पर होता है जो 400 त्रुटि का कारण बनता है।

+1

ओह भगवान। मुझे पता था कि यह बहुत तुच्छ हो जाएगा। अफसोस की बात है, मैं इसके लिए प्रलेखन नहीं मिला। – Rahul

+0

Google * फ्लास्क 400 त्रुटि *, [फ्लास्क क्विकस्टार्ट] खोलें (http://flask.pocoo.org/docs/quickstart/) और स्ट्रग + एफ 400. ;-) –

+0

मैंने थोड़ी देर के लिए ऐसा किया ... रिसॉर्ट करने से पहले को – Rahul

1

@Robin Krahl के अलावा, आपको अपने फॉर्म में enctype="multipart/form-data" भी जोड़ना चाहिए। तो कोड शायद इस तरह:

<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>" 
संबंधित मुद्दे