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

السؤال

نشر

أحاول أن أقوم بعمل API وأريد أن أحصل على البيانات المرسلة من العميل على شكل كود JSON في طلب من نوع POST، حاولت أن أستخدم الكود التالي:

@app.route('/api/<id>', methods=['GET', 'POST'])
def add_message(id):
    content = request.json()
    return content

ولكن يبدو أن هذه الطريقة لا تعمل بشكل صحيح، كيف أحصل على كود JSON المرسل في طلب POST في Flask؟

Recommended Posts

  • 1
نشر

يمكنك أن تستخدم الخاصية json فقط وليس التابع ()json في الكود الخاص بك، حيث تعيد هذه الخاصية قاموس يعبر عن كود JSON الذي تم إرساله في جسم الطلب request، كالتالي:

@app.route('/api/<id>', methods=['GET', 'POST'])
def add_message(id):
    content = request.json	# dictionary
    return content

أيضًا تستطيع أن التابع ()get_json للحصول على نفس القيمة:

@app.route('/api/<id>', methods=['GET', 'POST'])
def add_message(id):
    content = request.get_json() 
    return content

لكن لاحظ أن كلا الطريقتين السابقتين تحتاج إلى إرسال نوع البيانات application/json كترويسة في الطلب header وإلا لن يعمل الكود السابق، ولكي تتخطي هذا النوع الوحصول على البيانات حتى وإن لم يتم إرسال application/json ضمن ترويسة الطلب، فعليك أن تقوم بتمرير الخاصية force بقيمة True إلى التابع get_json:

@app.route('/api/<id>', methods=['GET', 'POST'])
def add_message(id):
    content = request.get_json(force=True) 
    return content

وفي حالة ظهر لك الخطأ 400 Bad Request response فهذا يعني أن هناك مشكلة في كود JSON المرسل إلى الخادم، ويجب التحقق منه بشكل قبل إرساله إلى الخادم.، ويمكنك أن تستعمل مواقع مثل JSON validator للتحقق من صلاحية الكود

أيضًا تستطيع أن تقوم بمرير الخاصية silent بقيمة True إلى التابع get_json لكي لا يظهر أي أخطاء في حالة حدوث مشكلة:

@app.route('/api/<id>', methods=['GET', 'POST'])
def add_message(id):
    content = request.get_json(force=True, silent=True) 
    
    if not content:
        return "can't parse JSON code"
    
    return "done"

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...