docs:python_web_frameworks

أطر الويب في بايثون

ما هي أطر الويب ؟

برمجة وتصميم مواقع الإنترنت لا تهدف إلى توليد كود HTML (وهو ما تجيده لغة PHP) بل تتعداها إلا أمور كثيرة مكررة بل رتيبة ومملة تكون مشتركة في تطوير أغلب المواقع. حيث أن أغلب المواقع تحتاج إلى مواثقة المستخدمين وتتبع الجلسات وتحتاج التحدث مع قاعدة بيانات وتحتاج إلى إلى صفحات لإدخال تلك المعلومات عبر استمارات forms وتحتاج إلى عرض تلك المعلومات بطرق متعددة وقد تحتاج لحفظ نسخ خبيئة cached وغير ذلك.

مكونات أطر الويب

مفهوم MVC

تقوم أغلب أطر الويب على فكرة MVC أو Model View Controller أي النموذج-العرض-الحاكم أي تقسيم برنامج الويب إلى عناصر مستقلة لا تتداخل هي

  • النموذج Model - حيث نحدد عناصر المدخلات (نوعها وقيمها التلقائية وفهارسها والعلاقات فيما بينها) وهو يكافئ مخطط قاعدة البيانات لكن بصورة مستقلة عن نوع قاعدة البيانات (أي من المفروض أن نتمكن من تغيير قاعدة البيانات من MySQL إلى PostgreSQL بتعديل الإعدادات فقط) غالبا ما يتم ذلك ORM أو Object Relational Mappers أي تثميل كل جدول في قاعدة البيانات بفئة class وتمثيل كل صف في الجدول بكائن من تلكم الفئة.
  • العرض View - وهو نظام قوالب لتمثيل المدخلات والبيانات ويفترض أن يكون نظام القوالب مرنا به مزايا مثل الحلقات التكرارية والجمل الشرطية وبل يحتوي قوالب أخرى أو يُحتوى فيها (الوراثة) وفي نفس الوقت يجب أن تخلو القوالب من البرمجة وتكون أقرب للتصميم فالقوالب ليست لغات برمجة.
  • الحاكم Controller - وهنا البرمجة حيث نجلب كائنات من النموذج حتى نركبها على قالب ما أو ننشئ كائنات جديدة. وهنا نحتاج ربط عناوين URI بالدوال المطلوب تنفيذها ويكون ذلك بطريقتين
    • مطابقة أنماط معينة تسمى routes تقابل بين النمط والدالة
    • نشر الكائنات object dispatcher أو object publisher حيث مثلا يتم تنفيذ الدالة التي تطابق جزء من عنوان url وتمرير بقيته إليها كمعاملات.

الاستمارات والودجات

تدخل البيانات في الغالب عبر استمارات forms تحتوي على حقول إدخال مثل حقل الإدخال النصي التقليدي أو القائمة المسندلة أو الاختيار من متعدد وغيرها وقد تحتوي أيضا على عناصر إدخال متقدمة تسمى الودجات widgets مثلا حقل اختيار التاريخ يكون على شكل تقويم يعرض أيام الشهر ويمكنك من الانتقال بين الأشهر والسنوات وما يتضمنه ذلك استخدام جافاسكربت.

يفترض أن يوفر إطار الويب طريقة لفحص صلاحية الاستمارة form validation

خادم منضدد

تحتوي أغلب أطر الويب طريقة لتنفيذ خادم منضدد يأتي ضمنيا معها لسهيل اختبار البرنامج أثناء التطوير.

أدوات إدارية

توفر أغلب أطر الويب أداة تنفذ من سطر الأوامر تمكنك من

  • إنشاء مشروع جديد (تضع فيه كل ما تحتاجه حتى تبدأ وغالبا ما يحتوي على تعليقات مثلا ضع كذا هنا لتعمل كذا)
  • عرض وتمحيص قاعدة البيانات أو هيكلة SQL …
  • مزامنة النموذج مع قاعدة البيانات (إضافة الجداول أو حذفها أو تعديلها كي تأخذ الحقول الجديدة وحذف القديمة …)

واجهة ويب إدارية

تمكنك واجهة الويب من إنشاء مدخلات جديدة بنقرة زر كذلك يمكنك استعارة الكود منها وتعديله لعمل تطبيق الويب الخاص بك.

البرمجيات البينية Middleware

تمكنك البرمجيات البينية بإضافة ميزة ما إلى بعض أو كل الصفحات في تطبيق الويب عبر تركيب تطبيق آخر وآخر وآخر مثلا عبر WSGI middleware دون تعديل الكثير الكود البرمجي مثلا يمكن وضع تطبيق يعمل على الخدمة من نسخة خبيئة منه إن وجدت وإلا يستدعي التطبيق الذي تحته ويحفظ النسخة الخبيئة.

مقارنة بين أطر الويب

أشهر أطر الويب في بايثون هي:

  • إطار جانغو Django
  • إطار الأبراج Pylons
  • إطار TurboGears - حاليا يتعمد على الذي قبله

يتداخل المشروعان الآخيرين كثيرا فالأبراج مستوحى من تيبوغيرز قبل أن ينتقل هذا الأخير للاعتماد على الأول!!

وجه المقارنة جانغو تيربو غيرز بايلونز
الربط مع العناوين أنماط routes تفضيل نشر الكائنات عبر cherrypy تفضيل الأنماط routes
القوالب قوالب جانغو تفضيل genshi تفضيل mako

أطر الويب المصغرة

تفتقر أطر الويب المصغرة إلى العديد من المزايا السابقة فهي لا تحتوي على نموذج (يمكن تعويض ذلك باستخدام أي ORM مستقل مثل SQLAlchemy أو python-elixir) ولا تحتوي على نظام استمارات ولا ودجات وبعضها قد لا يحتوي على تكامل مباشر مع أي نظام قوالب وبالتأكيد لن تحتوي على نظام مواثقة أو إدارة للمستخدمين ولا نظام تخبئة cache system ولا إدارة للجلسات وغير ذلك

من أفضل هذه الأطر

  • الزجاجة bottle ويمتاز بأنه على صغرة فهو يدعم فكرة MVC ويحتوي على نظام توجيه routes قوي وبسيط ويحتوي نظام قوالب قوي وبسيط ويحتوي قوالب خارجية لكنه لا يحتوي على ORM بل يمكن استخدام elixir أو SQLAlchemy لتحقيق ذلك.
  • إطار web.py
  • إطار الكرز CherryPy - إطار ويب ناشر للكائنات مستخدم في TurboGears
  • إطار [http://flask.pocoo.org/|flash]] وهو عبارة عن نظام توجيه routes

نقاش

عادل, 2011/12/03 21:48

السلام عليكم , بالنسبة للفقرة الاخيرة عن اطر الويب الصغيرة تحتوي ملاحظات خاطءة فمثلا اطار webpy يشتمل على كل اغلب المزايا , و شخصيا انا افضله لانه و بكل بساطة يتيح بناء التطبيقات بدون ان يفرض علي اسلوب معين عكس django , web2py . بالاضافة الى انه سهل التشغيل على الاستضافات المشتركة

و اشكرك جزيل الشكر على تطرقك للموضوع =) و السلام عليكم و رحمة الله و بركاته

عبدالله, 2016/01/23 10:18
هل يوجد كتب تشرحه بصراحه لاني بدأت اكره Django واريد واحد افضل واسرع واخف وخاصتا يعمل على كل الاستضافات بكل سهوله
وشكراً
أدخل تعليقك:
 
آخر تعديل:: 23 نيسان 2015 الساعة 00:20 (تحرير خارجي)