2012-04-18 29 views
16

Tôi đang cố gắng tạo api đơn giản trong Flask, bước đầu tiên là nhận dữ liệu POST json. (Tôi chỉ muốn in nó bây giờ) Đây là mã của tôi và khi tôi yêu cầu/api với dữ liệu json, nó trả về một lỗi 500. Bất kỳ suy nghĩ về lý do tại sao điều này đang xảy ra?Yêu cầu POST bình thường đang khiến máy chủ bị lỗi

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

Lệnh curl:

$ 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" 
} 

Trả lời

24

Đầu những gì bạn muốn làm là kích hoạt chế độ debug để Flask sẽ thực sự cho bạn biết lỗi này là. (Và bạn sẽ có được lợi ích bổ sung bình nạp lại mỗi khi bạn sửa đổi mã của bạn!)

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

Sau đó, chúng tôi tìm ra lỗi của chúng tôi:

TypeError: 'dict' object is not callable 

Bạn đang trở request.json, mà là một từ điển. Bạn cần phải chuyển đổi nó thành một chuỗi đầu tiên. Thật dễ dàng để thực hiện:

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

Có bạn! :)

+1

Chế độ gỡ lỗi đó đã lưu cho tôi rất nhiều thời gian: D –

+0

Các cài đặt khác để gỡ lỗi, vì tôi thấy rằng mặc dù đã gỡ lỗi được đặt thành True, tôi không nhận được thông báo lỗi trên màn hình. – disruptive

+0

Tôi thực sự nhận ra rằng tất cả các thông báo lỗi được xuất ra thiết bị đầu cuối nơi tôi đang chạy máy chủ của mình. Tuy nhiên, chế độ gỡ lỗi hóa ra là hữu ích cho các thử nghiệm khác (và nó in ngay nơi bạn chạy lệnh curl của bạn) – alisa

Các vấn đề liên quan