اذهب إلى المحتوى
  • 0

كيف يمكنني الحصول على جسم الطلب Request Body في فلاسك Flask؟

Mohssen A Mohssen

السؤال

أحاول الوصول إلى جسم طلب من نوع POST بغض النظر عن قيمة Content-Type الموجودة في رأس الطلب، لكن أحيانًا عندما أستعمل request.data كما في الكود التالي، لكن أحصل على البيانات بعد عمل parse لها:

@app.route('/', methods=['POST'])
def index():
    data = request.data # يكون فارغ في بعض الأحيان
    # ...

أريد الحصول على جسم الطلب Request Body في شكله الخام raw data بدون تعديل هذه القيمة.

كيف يمكنني القيام بهذا الأمر؟

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

تستطيع إستخدام التابع ()request.get_data والذي يتم إستخدامه من قِبل كلٍ من request.data و request.form و request.json حيث يتم جلب البيانات وعمل parse لها حسب قيمة الترويسة content-type في رأس الطلب

على سبيل المثال إن كانت قيمة الترويسة Content-Type تحمل أي قيمة من القيم التالية:
 

multipart/form-data
application/x-www-form-urlencoded
application/x-url-encoded

فسوف يتم جلب البيانات وتحليلها وتخزينها في request.form، وستكون قيمة كلٍ من reqeust.data و request.json فارغة حينها.

يمكنك إستعمال التابع ()request.get_data على النحو التالي:

@app.route('/', methods=['POST'])
def index():
    print(request.get_data())
    # ...

لاحظ أنك إن إستعملت أيًا من التوابع request.data و request.form و request.json فسوف يقوم التابع ()request.get_request بإرجاع قيمة فارغة، لذلك عليك أن تقوم بتخزين جسم الطلب في متغير في بداية الدالة.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

إن كنت تستخدم flask_restfull يمكنك إستدعاء التابع reqparse 

from flask_restful import  reqparse

ومن ثم تقوم بإنشاء كائن من خلال هذا الparser تضع فيه البيانات التي تريد استقبالها من الbody

user_args = reqparse.RequestParser()
user_args.add_argument("name", type=str, help="name")
user_args.add_argument("email", type=str, help="email")

ومن ثم تأتي في دالة الget أو الpost وتقم بإستقبال الجسم عبر الشفرة التالية

args = user_args.parse_args()

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...