python फ्लास्क अनुरोध में डेटा कैसे प्राप्त करें




flask (8)

मैं अपने फ्लास्क ऐप को भेजे गए डेटा को प्राप्त करने में सक्षम होना चाहता हूं। मैंने request.data तक पहुंचने का प्रयास किया है लेकिन यह एक खाली स्ट्रिंग है। आप अनुरोध डेटा तक कैसे पहुंचते हैं?

@app.route('/', methods=['GET', 'POST'])
def parse_request():
    data = request.data  # data is empty
    # need posted data here

इस सवाल के जवाब ने मुझे पाइथन फ्लास्क में कच्चे पोस्ट बॉडी प्राप्त करने के लिए कहा है, भले ही सामग्री-प्रकार शीर्षलेख के बावजूद , जो पार्स किए गए डेटा के बजाय कच्चे डेटा प्राप्त करने के बारे में है।


यह बस इस प्रकार है

यूआरएल क्वेरी पैरामीटर के लिए , request.args का उपयोग करें

search = request.args.get("search")
page = request.args.get("page")

फॉर्म इनपुट के लिए , request.form का उपयोग करें

email = request.form.get('email')
password = request.form.get('password')

डेटा प्रकार एप्लिकेशन / जेसन के लिए , request.data का उपयोग करें

# data in string format and you have to parse into dictionary
data = request.data
dataDict = json.loads(data)

मैं एप्लिकेशन / जेसन का पूरा उदाहरण देता हूं:

from flask import Flask, abort, request 
import json

app = Flask(__name__)


@app.route('/foo', methods=['POST']) 
def foo():
    if not request.json:
        abort(400)
    print request.json
    return json.dumps(request.json)


if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000, debug=True)

पोस्ट अनुरोध के लिए Postman उपयोग करें:

कर्ल कमांड का प्रयोग करें:

curl -i -H "Content-Type: application/json" -X POST -d '{"userId":"1", "username": "fizz bizz"}' http://localhost:5000/foo

पीएस यूआरएल क्वेरी पैरामीटर उदाहरण के लिए, आप फ्लास्क अनुमोदन में एकाधिक पैरामीटर में अपना उत्तर देख सकते हैं


docs अनुरोध पर उपलब्ध विशेषताओं का वर्णन करते हैं। अधिकांश सामान्य मामलों में request.data खाली हो जाएगा क्योंकि इसे फ़ॉलबैक के रूप में उपयोग किया जाता है:

request.data में आने वाले अनुरोध डेटा को स्ट्रिंग के रूप में शामिल किया गया है, यदि यह एक mimetype फ्लास्क संभाल नहीं करता है।

  • request.args : यूआरएल क्वेरी स्ट्रिंग में कुंजी / मूल्य जोड़े
  • request.form : एचटीएमएल पोस्ट फॉर्म से, शरीर में कुंजी / मूल्य जोड़े, या जावास्क्रिप्ट अनुरोध जो JSON एन्कोडेड नहीं है
  • request.files : शरीर में फाइलें, जो फ्लास्क form से अलग रहता है। एचटीएमएल फॉर्मों को enctype=multipart/form-data उपयोग करना होगा या फ़ाइलों को अपलोड नहीं किया जाएगा।
  • request.values : संयुक्त args और form , अगर चाबियाँ ओवरलैप होती हैं तो args पसंद करते हैं

ये सभी MultiDict उदाहरण हैं। आप इसका उपयोग कर मूल्यों तक पहुंच सकते हैं:

  • request.form['name'] : अगर आप जानते हैं कि कुंजी मौजूद है तो अनुक्रमण का उपयोग करें
  • request.form.get('name') : कुंजी का अस्तित्व मौजूद नहीं get उपयोग करें
  • request.form.getlist('name') : कुंजी को एकाधिक बार भेजे जाने पर getlist उपयोग करें और आप मानों की एक सूची चाहते हैं। केवल पहला मान प्राप्त करें।

@app.route('/', methods=['POST'])
def process_data():
    req_data = request.get_json(force=True) # force=True will make sure this works even if a client does not specify application/json
    language = req_data['language'] # or whatever key you have in your json

    return '''The language value is: {}'''.format(language)

बस बोलते हुए, आप नीचे दिए गए तरीके से डेटा प्राप्त कर सकते हैं:

@app.before_request
def before_request():
    g.data = request.get_json() or request.values

अब, g.data werkzeug.ImmutableMultiDict का एक उदाहरण है। फिर आप g.data उपयोग कर सकते हैं जो आपकी अधिकांश आवश्यकताओं को संभाल सकता है। उदाहरण के लिए, आप इसका उपयोग इस तरह कर सकते हैं:

@app.route("/something", methods=["POST"])
def do_something():
    result = handle(g.data)
    return jsonify(data=result)

बेशक, आप app बजाय blueprint उपयोग कर सकते हैं ~~


यदि आप सामग्री प्रकार के बावजूद कच्चे पोस्ट बॉडी चाहते हैं, तो आपको request.get_data() उपयोग करना चाहिए, क्योंकि request.form को werkzeug.ImmutableMultiDict प्रारूप में परिवर्तित किया गया है।


from flask import request
request.data

JSON के लिए फ्लास्क का एक और शॉर्टकट है:

हैडर:

{Content-Type: application/json}

@app.route("/something", methods=["POST"])
def do_something():
    data = request.get_json()




flask