2013-07-19 35 views
11

Tôi đã xem qua tài liệu, nhưng đối với cuộc sống của tôi, tôi không thể tìm ra cách đối tượng request.form trong Flask được điền. The documentation nói rằng dữ liệu này được điền đầy đủ từ các yêu cầu POST hoặc PUT, nhưng biểu mẫu của tôi là động nên tôi không nhất thiết phải biết trường nào tồn tại khi yêu cầu POST được gửi - mặc dù tôi muốn đảm bảo rằng tôi thêm thông tin từ các trường này vào cơ sở dữ liệu.Trường biểu mẫu động trong flask.request.form

Một số trường trong biểu mẫu luôn ở đó, nhưng cũng sẽ có bất kỳ số trường bổ sung nào từ danh sách khoảng 60. Tôi nên tìm hiểu xem trường nào trong số các trường bổ sung này có trong yêu cầu và cách thực hiện tôi có nên lấy dữ liệu từ họ không?

EDIT: Vấn đề cụ thể của tôi đã được giải quyết, nhưng vẫn đáng để hỏi cách từ điển request.form được điền. Tôi phát hiện ra một cách khó khăn rằng nếu một hộp kiểm đầu vào được bỏ chọn, không có khóa được thêm vào từ điển dưới tên của nó, và cố gắng để có được giá trị của một khóa không tồn tại từ các kết quả từ điển trong một khó hiểu và khó hiểu HTTP 400 BAD REQUEST lỗi.

+0

Giá trị nào xuất hiện trong request.form phụ thuộc vào dữ liệu mà trình duyệt gửi. Quyết định không gửi chìa khóa khi hộp kiểm được bỏ chọn được thực hiện bởi trình duyệt, không phải bởi Flask. –

+0

Tôi nghĩ tốt nhất là bạn nên mở các câu hỏi mới cho các câu hỏi mới mà bạn có. –

Trả lời

19

request.form trả về đối tượng MultiDict. Về cơ bản, nó có nghĩa là đối với 1 khóa, bạn có thể có nhiều giá trị. Nếu bạn muốn kiểm tra những gì hình thức POST của bạn trông như thế nào, chỉ cần làm một tuyên bố in nhanh chóng như sau

f = request.form 
for key in f.keys(): 
    for value in f.getlist(key): 
     print key,":",value 

Nếu bạn đọc tài liệu cho MultiDict, nó nói

"Một MultiDict là một lớp con từ điển tùy chỉnh để đối phó với nhiều giá trị cho cùng một chìa khóa đó là ví dụ sử dụng bởi các chức năng phân tích trong giấy gói. này là cần thiết vì một số yếu tố hình thức HTML vượt qua nhiều giá trị cho cùng một chìa khóa. "

http://werkzeug.pocoo.org/docs/datastructures/#werkzeug.datastructures.MultiDict

+0

Tôi muốn nói (đóng góp) rằng, ngay từ cái nhìn đầu tiên, có một chút khó hiểu cách 'request.form' được phân tích cú pháp giống như một từ điển Python bình thường (mặc dù nó trả về một kiểu' dict' với 'tuples' nếu bạn cố gắng in' f'), nhưng câu trả lời có ý nghĩa rất nhiều, đặc biệt liên quan đến ví dụ và cũng là định nghĩa của Flask MultiDict. Cảm ơn rất nhiều, #codegeek :). – ivanleoncz

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