2013-07-14 27 views
5

Bật ra Flask đặt request.data thành chuỗi trống nếu loại nội dung của yêu cầu là application/x-www-form-urlencoded. Vì tôi đang sử dụng một yêu cầu JSON body, tôi chỉ muốn phân tích cú pháp json hoặc buộc Flask phân tích cú pháp nó và trả về request.json.Bình - Làm cách nào để đọc nội dung thô trong yêu cầu POST khi loại nội dung là "application/x-www-form-urlencoded"

Điều này là cần thiết vì việc thay đổi loại nội dung AJAX buộc yêu cầu HTTP OPTION, làm phức tạp back-end.

Làm cách nào để làm cho Flask trả về dữ liệu thô trong đối tượng yêu cầu?

Trả lời

7

Bạn có thể nhận dữ liệu bài đăng qua request.form.keys()[0] nếu loại nội dung là application/x-www-form-urlencoded.

request.formmultidict, khóa có chứa dữ liệu bài được phân tích cú pháp.

+0

Dường như đây cũng là cách để lấy dữ liệu của chúng tôi về bài đăng để đóng chai. Chỉ cần thay đổi request.form.keys() [0] thành 'list (request.forms.keys()) [0]'. Cảm ơn bạn đã giải quyết xong giờ gỡ lỗi! –

+0

Tại sao nó hoạt động? Có vẻ như nó chỉ là chìa khóa đầu tiên của từ điển được phân tích từ cơ thể, nhưng bằng cách nào đó nó trả về toàn bộ cơ thể? – max

+0

Ai đó có thể giải thích tại sao dữ liệu được đưa vào các khóa biểu mẫu? –

1

Nếu bạn muốn có được JSON khi yêu cầu là 'Content-Type': 'application/x-www-form-urlencoded' bạn cần "lực lượng" chuyển đổi sang JSON như de mã bên dưới:

from flask import Flask, request 


app = Flask(__name__) 


@app.route("/my-endpoint", methods = ['POST']) 
def myEndpoint(): 

    requestJson = request.get_json(force=True) 

    //TODO: do something.... 

    return requestJson 


if __name__ == "__main__": 
    port = int(os.environ.get('PORT', 5000)) 
    app.run(host='0.0.0.0', port=port, debug=True, use_reloader=True) 
1

Sử dụng request.get_data() để nhận dữ liệu POST. Tính năng này hoạt động độc lập với dữ liệu có loại nội dung application/x-www-form-urlencoded hoặc application/octet-stream.