2012-04-18 19 views
16

क्रैश करने का कारण बन रहा है, मैं फ्लास्क में एक साधारण एपीआई बनाने की कोशिश कर रहा हूं, पहला चरण पोस्ट जेएसएस डेटा प्राप्त कर रहा है। (मैं बस इसे अभी प्रिंट करना चाहता हूं) यह मेरा कोड है और जब मैं जेसन डेटा के साथ अनुरोध/एपीआई करता हूं, तो यह 500 त्रुटि देता है। यह क्यों हो रहा है पर कोई विचार?फ्लास्क पोस्ट अनुरोध सर्वर को

from flask import Flask, request, Response 
app = Flask(__name__) 

@app.route('/') 
def root_response(): 
    return "Hello World." 

@app.route('/api', methods=['POST', 'GET']) 
def api_response(): 
    if request.method == 'POST': 
     return request.json 

if __name__ == '__main__': 
    app.run() 

कर्ल आदेश:

$ curl -H "Content-Type: application/json" --data @body.json http://127.0.0.1:5000/api 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> 
<title>500 Internal Server Error</title> 
<h1>Internal Server Error</h1> 
<p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.</p> 

body.json:

{ 
"please": "print", 
"me": "now" 
} 

उत्तर

24

पहले कि आप क्या करना चाहते हैं तो बोतल वास्तव में आपको बता देंगे क्या त्रुटि है डिबग मोड सक्षम है। (और आप आप अपने कोड को संशोधित हर बार पुन: लोड कुप्पी के अतिरिक्त लाभ मिलता है!)

if __name__ == '__main__': 
    app.debug = True 
    app.run() 

तब हम अपने त्रुटि का पता लगाना:

TypeError: 'dict' object is not callable 

आप request.json लौट रहे हैं, जो एक है शब्दकोश। आपको इसे पहले एक स्ट्रिंग में परिवर्तित करने की आवश्यकता है। यह करना बहुत आसान है:

def api_response(): 
    from flask import jsonify 
    if request.method == 'POST': 
     return jsonify(**request.json) 

वहां आप हैं! :)

+1

उस डीबग मोड ने मुझे बहुत समय बचाया: डी –

+0

डीबग के लिए अन्य सेटिंग्स हैं, क्योंकि मुझे लगता है कि डीबग को सही पर सेट करने के बावजूद, मुझे स्क्रीन पर त्रुटि संदेश नहीं मिलते हैं। – disruptive

+0

मुझे वास्तव में एहसास हुआ कि सभी त्रुटि संदेश टर्मिनल पर आउटपुट थे जहां मैं अपना सर्वर चला रहा था। फिर भी डीबग मोड अन्य परीक्षणों के लिए सहायक साबित हुआ (और यह सही प्रिंट करता है जहां आप अपना कर्ल कमांड चलाते हैं) – alisa

संबंधित मुद्दे