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

السؤال

نشر

عندما أقوم بإنشاء مشروع بإستخدام فلاسك Flask أقوم بعمل التطبيق بالشكل التالي:

from flask import Flask

app = Flask(__name__)

لماذ نكتب __name__ هنا؟ لماذا لا نكتب أسم المشروع هنا على سبيل المثال؟

أعلم أن المتغير __name__ يشير إلى اسم الوحدة، والتي ستكون __main__ عندما أشغل المشروع، لكن ما هي المعلومات التي يمكن أن يحصل عليها Flask عندما يتلقى __main__ كمعامله الأول؟

Recommended Posts

  • 1
نشر

__name__ عبارة عن طريقة للحصول على اسم الاستيراد للمكان الذي تم تحديد التطبيق فيه. فعلى سبيل المثال إن كان لدينا ملفين app.py و settings.py، ويحتويان على الأكواد التالية:

  • الملف app.py
    import settings
    
    print('app.py')
    print('__name__ in app.py:', __name__)

     

  • الملف settings.py
    print('settings.py')
    print('__name__ in settings.py:', __name__)

     

كما تلاحظ من الاكواد السابقة فإن الملف app.py يقوم بإستدعاء الملف settings.py، وكلًا من الملفين يطبعان قيمة __name__ ، وسنحصل على النتيجة التالية عند تشغيل الملف app.py:

settings.py
__name__ in settings.py: settings
app.py
__name__ in app.py: __main__

من الواضح من النتيجة السابقة أن __name__ في الملف settings.py تشير إلى اسم الملف "settings"، بينما في الملف app.py فهي __main__ أي أن هذا الملف هو الملف الرئيسي الذي تم تشغيله من سطر الأوامر. بهذه الطريقة فإن فلاسك Flask يستخدم اسم الاستيراد (الموجود في __name__) لمعرفة مكان البحث عن القوالب templates والملفات الثابتة static files .. إلخ.

عند استخدام حزمة package، إذا حددت تطبيقك في الملف __init__، فسيظل __name__ يشير إلى المكان "الصحيح" إلى حيث توجد الموارد. ومع ذلك ، إذا قمت بتعريف فلاسك Flask في ملف مختلف، مثل mypackage/app.py وأستدعيت هذا الملف الأخير من مكان آخر خارج الحزمة مثل main.py، فإن استخدام __name__ سيخبر فلاسك Flask بالبحث عن الموارد المتعلقة بـ mypackage.app بدلاً من mypackage، أي أنه يشير إلى المكان الصحيح إلى الموارد resources (القوالب templates والملفات الثابتة static files .. إلخ)

استخدام __name__ مجرد اختصار لاستخدام اسم الحزمة. وليس هناك سبب للقول إن الاسم يجب أن يكون اسم الحزمة الأساسية، فالأمر متروك تمامًا لهيكل مشروعك، وإن كان تطبيقك بسيط للغاية (مجموعة من الملفات البسيطة بدون الإعتماد على الحزم) فيمكنك كتابة أي شيء بدلًا من __name__ أو حتى عدم كتابة أي شيء

from flask import Flask

app = Flask("")	# مجرد نص فارغ

@app.route('/')
def index():
    return "Hello, World!"

app.run(debug=True)

 

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

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

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

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...