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

السؤال

نشر

عندما أقوم بإستعمال التابع flask.jsonify أو flask.dumps أحصل على نفس النتيجة في المتصفح،

from flask import Flask, json, jsonify
app = Flask(__name__)


@app.route('/api', methods=['GET', 'POST'])
def home():
    content = {
        "username": "admin",
        "email": "admin@localhost",
        "id": 12
    }
    return jsonify(content)
    # ما الفرق بين الطريقة السابقة والكود التالي؟
    # return json.dumps(content)

app.run()

لذلك أريد أن أعرف الفرق بين إستخدام الطريقتين، ومتى أستعمل كل واحدة منهما؟

Recommended Posts

  • 1
نشر

التابع flask.jsonify يعيد نتيجة من نوع flask.Response أي يكون كود JSON جاهز ليتم إرساله إلى العميل، ويتم إرسال ترويسة content-type بقيمة application/json حتى يتمكن العميل من معرفة نوع البيانات المرسلة إليه، ويقوم بمعالجتها بشكل سليم، على الجانب الآخر التابع json.dumps يقوم بتحويل قاموس Dictionary من البيانات (أو قائمة List) إلى نص ليتم إستخدامه أو إرساله أو تخزينه لوقت لاحق، وإذا إستخدمت هذا التابع في إرسال كود JSON إلى العميل فلن يتم تجهيز ترويسة من content-type بقيمة application/json، ولكن سيتم إستخدام القيمة الإفتراضية text/html; charset=utf-8

يمكنك أن تتأكد من الترويسات المرسلة إلى العميل من خلال أدوات مثل Postman أو أدوات المطورين Dev tool، كما في الصورة التالية:

  • عند إستعمال التابع flask.jsonify
    61ae85fe2c8be_Screenshot2021-12-06235024.thumb.png.ee6046ebe3a8cd00fed18f72672ce513.png
  • عند إستعمال التابع json.dumps
    61ae85fb653e0_Screenshot2021-12-06234950.thumb.png.7129074259b81f740ddc96bed0c6a816.png

لاحظ أيضًا كيف تعرفت الإضافة JSON Formatter على كود JSON عند إستعمال التابع flask.jsonify، بينما لم تتعرف عليه عند إستعمال التابع json.dumps، وذلك بسبب الترويسة content-type

لذلك إن أردت أن تقوم بعمل API أو تريد أن ترسل كود JSON بشكل عام، فعليك أن تستعمل التابع flask.jsonify المُعد لهذا الأمر، بينما إذا أردت أن تقوم بتخزين الكود في قاعدة بيانات أو ملف ما، فعليك أن تستعمل التابع json.dumps

ملاحظة: التابع flask.jsonify يستخدم التابع json.dumps ضمنيًا لكي يقوم بتحويل القواميس والقوائم إلى نص String، ولكن يتم تجهيز الترويسة content-type كما ذكرت سابقًا.

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...