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

السؤال

نشر

أحاول الوصول إلى جسم طلب من نوع 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...