2014-04-27 17 views
18

Hiểu biết của tôi là request.args trong Flask chứa các tham số được mã hóa URL từ yêu cầu GET trong khi request.form chứa dữ liệu POST. Những gì tôi đang gặp khó khăn là lý do tại sao khi gửi yêu cầu POST, cố gắng truy cập dữ liệu với request.form trả lại lỗi 400 nhưng khi tôi cố gắng truy cập nó với request.args thì có vẻ như hoạt động tốt.Yêu cầu bình thường.đối với yêu cầu.form

Tôi đã thử gửi yêu cầu với cả hai Postmancurl và kết quả giống nhau.

curl -X POST -d {"name":"Joe"} http://127.0.0.1:8080/testpoint --header "Content-Type:application/json" 

Code:

@app.route('/testpoint', methods = ['POST']) 
def testpoint(): 
    name = request.args.get('name', '') 
    return jsonify(name = name) 

Trả lời

3

dữ liệu json của bạn trong curl là sai, vì vậy Flask không phân tích dữ liệu để tạo thành.

Gửi dữ liệu như thế này: '{"name":"Joe"}'

curl -X POST -d '{"name":"Joe"}' http://example.com:8080/testpoint --header "Content-Type:application/json" 
+3

Vấn đề là OP đang đăng JSON ngay từ đầu. –

35

Bạn đang POST-ing JSON, không request.args cũng không request.form sẽ làm việc.

request.form chỉ hoạt động nếu bạn POST dữ liệu với đúng loại nội dung; dữ liệu biểu mẫu được đăng với mã hóa application/x-www-form-urlencoded or multipart/form-data.

Khi bạn sử dụng application/json, bạn không còn POST dữ liệu biểu mẫu nữa. Sử dụng request.get_json() để truy cập dữ liệu JSON POST thay thế:

@app.route('/testpoint', methods = ['POST']) 
def testpoint(): 
    name = request.get_json().get('name', '') 
    return jsonify(name = name) 
Các vấn đề liên quan