ফ্লাস্কের অনুরোধে প্রাপ্ত ডেটা পান


734

আমি আমার ফ্লাস্ক অ্যাপে ডেটা প্রেরণ করতে সক্ষম হতে চাই। আমি অ্যাক্সেস করার চেষ্টা করেছি request.dataতবে এটি একটি খালি স্ট্রিং। আপনি কীভাবে অনুরোধের ডেটা অ্যাক্সেস করবেন?

from flask import request

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

এই প্রশ্নের উত্তর আমাকে পাইথন ফ্লাস্কে কাঁচা পোস্ট পেতে বলে জিজ্ঞাসা করেছিল , পরবর্তী কন্টেন্ট-টাইপ শিরোনাম নির্বিশেষে , যা পার্সড ডেটার পরিবর্তে কাঁচা তথ্য পাওয়ার বিষয়ে about

উত্তর:


1264

ডক্স বৈশিষ্ট্যাবলী অনুরোধ উপলব্ধ বর্ণনা করে। বেশিরভাগ সাধারণ ক্ষেত্রে request.dataখালি থাকবে কারণ এটি ফ্যালব্যাক হিসাবে ব্যবহৃত হয়:

request.data মাইম টাইপ ফ্লাস্ক হ্যান্ডেল না করে এমন ক্ষেত্রে স্ট্রিং হিসাবে আগত অনুরোধ ডেটা থাকে।

  • request.args: URL ক্যোয়ারী স্ট্রিংয়ের মূল / মান জোড় value
  • request.form: এইচটিএমএল পোস্ট ফর্ম থেকে, বা জাভাস্ক্রিপ্ট অনুরোধ যা JSON এনকোডড নয়, শরীরে মূল / মান জোড়গুলি
  • request.files: ফ্লেস্ক থেকে পৃথক রাখে এমন ফাইলগুলি দেহে থাকে form। এইচটিএমএল ফর্ম অবশ্যই ব্যবহার enctype=multipart/form-dataকরতে হবে বা ফাইলগুলি আপলোড করা হবে না।
  • request.values: সংযুক্ত argsএবং form, argsকীগুলি ওভারল্যাপ হলে অগ্রাধিকার দেয়
  • request.json: JSON ডেটা পার্স করা হয়েছে। অনুরোধটিতে অবশ্যই application/jsonসামগ্রীর ধরণ থাকতে হবে, বা request.get_json(force=True)সামগ্রীর ধরণের উপেক্ষা করতে ব্যবহার করতে হবে।

এগুলির সমস্ত MultiDictউদাহরণ (বাদে json)। আপনি ব্যবহার করে মানগুলি অ্যাক্সেস করতে পারেন:

  • request.form['name']: কীটি বিদ্যমান থাকলে আপনি সূচকটি ব্যবহার করুন
  • request.form.get('name'): getকীটি উপস্থিত না থাকলে ব্যবহার করুন
  • request.form.getlist('name'): getlistযদি একাধিকবার কীটি প্রেরণ করা হয় এবং আপনি মানগুলির একটি তালিকা চান তবে ব্যবহার করুন । getশুধুমাত্র প্রথম মানটি প্রদান করে।

203

কাঁচা তথ্য পেতে, ব্যবহার করুন request.data। এটি কেবলমাত্র তখনই কাজ করে যদি এটি ফর্ম ডেটা হিসাবে পার্স করা যায় না, অন্যথায় এটি খালি request.formহবে এবং পার্সড ডেটা থাকবে।

from flask import request
request.data

177

ইউআরএল কোয়েরি পরামিতিগুলির জন্য, ব্যবহার করুন request.args

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

পোস্ট ফর্ম ইনপুট জন্য, ব্যবহার করুন request.form

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

বিষয়বস্তুর প্রকার সহ পোস্ট করা জেএসএনের জন্য application/json, ব্যবহার করুন request.get_json()

data = request.get_json()

98

পোস্ট করা JSON ডেটা পার্স করার এবং এটি আবার প্রতিধ্বনির উদাহরণ।

from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/foo', methods=['POST']) 
def foo():
    data = request.json
    return jsonify(data)

কার্ল সহ জেএসএন পোস্ট করতে:

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

অথবা পোস্টম্যান ব্যবহার করতে:

জেএসএন পোস্ট করতে পোস্টম্যান ব্যবহার


36

যদি আপনি বিষয়বস্তুর সাথে জেএসএন পোস্ট করেন তবে এটি ফ্লাস্কে পেতে application/jsonব্যবহার করুন request.get_json()। যদি সামগ্রীর ধরণটি সঠিক না হয় তবে তা Noneফেরত দেওয়া হয়। যদি ডেটা JSON না হয় তবে একটি ত্রুটি উত্থাপিত হয়।

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

31

সামগ্রীর প্রকার নির্বিশেষে কাঁচা পোস্ট বডি পেতে, ব্যবহার করুন request.get_data()। আপনি যদি ব্যবহার করেন request.data, এটি কল করে request.get_data(parse_form_data=True), যা জনবহুল হয়ে খালি request.form MultiDictছেড়ে দেবে data


18

request.formএকটি সাধারণ অভিধান হিসাবে পেতে , ব্যবহার করুন request.form.to_dict(flat=False)

কোনও এপিআই-এর জন্য জেএসএন ডেটা ফেরত দিতে, এতে পাস করুন jsonify

এই উদাহরণটি JSON ডেটা হিসাবে ফর্ম ডেটা ফেরত দেয়।

@app.route('/form_to_json', methods=['POST'])
def form_to_json():
    data = request.form.to_dict(flat=False)
    return jsonify(data)

এখানে কার্ল সহ পোষ্ট ফর্ম ডেটার উদাহরণ, জেএসএন হিসাবে ফিরে:

$ curl http://127.0.0.1:5000/data -d "name=ivanleoncz&role=Software Developer"
{
  "name": "ivanleoncz", 
  "role": "Software Developer"
}

12

request.get_json()JSON ডেটা পোস্ট করতে ব্যবহার করুন ।

data = request.get_json()
name = data.get('name', '')

request.formপোষ্ট পদ্ধতিতে ফর্ম জমা দেওয়ার সময় ডেটা পেতে ব্যবহার করুন ।

name = request.form.get('name', '')

request.argsজিইটি পদ্ধতিতে কোনও ফর্ম জমা দেওয়ার সময়, ইউআরএলটির ক্যোরি স্ট্রিংয়ে ডেটা পাস করার জন্য ব্যবহার করুন ।

request.args.get("name", "")

request.formইত্যাদি ডিক্ট-এর মতো, getযদি পাস না করা হয় তবে ডিফল্টের সাথে মান পেতে পদ্ধতিটি ব্যবহার করুন ।


10

application/jsonসামগ্রীর ধরণ ছাড়াই জেএসএন পোস্ট করতে , ব্যবহার করুন request.get_json(force=True)

@app.route('/process_data', methods=['POST'])
def process_data():
    req_data = request.get_json(force=True)
    language = req_data['language']
    return 'The language value is: {}'.format(language)

10

কাঁচা তথ্য ডাব্লুএসজিআই সার্ভার থেকে ফ্লাস্ক অ্যাপ্লিকেশন হিসাবে দেওয়া হয় request.stream। স্ট্রিমটির দৈর্ঘ্য Content-Lengthশিরোনামে রয়েছে।

length = request.headers["Content-Length"]
data = request.stream.read(length)

request.get_data()পরিবর্তে এটি ব্যবহার করা সাধারণত নিরাপদ ।


9

জাভাস্ক্রিপ্টে jQuery সহ জেএসএন পোস্ট করতে, JSON.stringifyডেটা ডাম্প করতে ব্যবহার করুন এবং সামগ্রীর ধরণটিতে সেট করুন application/json

var value_data = [1, 2, 3, 4];

$.ajax({
    type: 'POST',
    url: '/process',
    data: JSON.stringify(value_data),
    contentType: 'application/json',
    success: function (response_data) {
        alert("success");
    }   
});

এর সাথে ফ্লাস্কে পার্স করুন request.get_json()

data = request.get_json()

8

JSON পার্স করতে, ব্যবহার করুন request.get_json()

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

5

ব্যবহারকারীকে একটি ডাটাবেসে যুক্ত করতে ফর্ম ডেটা পোস্ট করার উদাহরণ এখানে। request.method == "POST"ফর্মটি জমা দেওয়া হয়েছে কিনা তা পরীক্ষা করে দেখুন । request.formফর্ম ডেটা পেতে কীগুলি ব্যবহার করুন । <form>অন্যথায় একটি HTML টেমপ্লেট রেন্ডার করুন । ফর্মের ক্ষেত্রগুলিতে nameকীগুলির সাথে মেলে এমন বৈশিষ্ট্য থাকা উচিত request.form

from flask import Flask, request, render_template

app = Flask(__name__)

@app.route("/user/add", methods=["GET", "POST"])
def add_user():
    if request.method == "POST":
        user = User(
            username=request.form["username"],
            email=request.form["email"],
        )
        db.session.add(user)
        db.session.commit()
        return redirect(url_for("index"))

    return render_template("add_user.html")
<form method="post">
    <label for="username">Username</label>
    <input type="text" name="username" id="username">
    <label for="email">Email</label>
    <input type="email" name="email" id="email">
    <input type="submit">
</form>

4

যদি বিষয়বস্তুর request.dataধরণটি ফর্ম ডেটা হিসাবে স্বীকৃত হয় তবে এতে পার্স করবে request.formএবং খালি স্ট্রিংটি ফিরিয়ে দেবে।

সামগ্রীর প্রকার নির্বিশেষে কাঁচা ডেটা পেতে, কল করুন request.get_data()request.dataকলগুলি get_data(parse_form_data=True), যখন Falseআপনি সরাসরি এটি কল করেন তা ডিফল্ট হয় ।


4

যদি শরীরটি ফর্ম ডেটা হিসাবে স্বীকৃত হয় তবে তা এতে থাকবে request.form। এটি যদি JSON হয় তবে তা এতে থাকবে request.get_json()। অন্যথায় কাঁচা তথ্য থাকবে request.data। কীভাবে ডেটা জমা দেওয়া হবে তা আপনি যদি নিশ্চিত না হন তবে আপনি ডেটা orদিয়ে প্রথমটি পেতে একটি চেইন ব্যবহার করতে পারেন ।

def get_request_data():
    return (
        request.args
        or request.form
        or request.get_json(force=True, silent=True)
        or request.data
    )

request.argsশরীরে যা ছিল তা নির্বিশেষে কোয়েরি স্ট্রিং থেকে পার্স করা আর্কগুলি রয়েছে, সুতরাং আপনি এটি মুছে ফেলবেন get_request_data()যদি এটি এবং কোনও শরীর উভয় একই সময়ে ডেটা করা উচিত।


2

এইচটিএমএল ফর্মের সাথে ফর্ম ডেটা পোস্ট করার সময়, inputট্যাগগুলির nameবৈশিষ্ট্য রয়েছে তা নিশ্চিত হয়ে নিন , অন্যথায় সেগুলি উপস্থিত থাকবে না request.form

@app.route('/', methods=['GET', 'POST'])
def index():
    print(request.form)
    return """
<form method="post">
    <input type="text">
    <input type="text" id="txt2">
    <input type="text" name="txt3" id="txt3">  
    <input type="submit">
</form>
"""
ImmutableMultiDict([('txt3', 'text 3')])

কেবল txt3ইনপুটটিতে একটি ছিল name, সুতরাং এটি উপস্থিত থাকার একমাত্র চাবি request.form

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.