جدول المحتويات
إطار الويب عكاشة
تمهيد
إنّ مواقع الإنترنت الناجحة ليست مجرّد صفحات HTML ساكنة بل إنّ أغلبها تحتوي على محتويات تفاعلية (تستخدم حسابات أو قواعد بيانات وتتفاعل مع المستخدمين وتسمح لهم بالتعليق والتواصل معاً)، يتم توليد المحتويات عبر لغات برمجة تنفّذ على الخادم.
إنّ تطوير تطبيقات الويب يحتوي على الكثير من الأمور الرتيبة المملّة، ومن هنا ظهرت الحاجة لأطر الويب web frameworks
تمّ تطوير إطار الويب عكاشة أساساً من أجل عمل تطبيق الويب في مشروع ثواب ثم رأيت فصله حتى يمكن الاستفادة منه في عمل تطبيقات أخرى حيث أنه كود عام يصلح لأي تطبيق ويب.
الوثائق
إن أفضل وثيقة لفهم عكاشة هي بالنظر إلى الكود وإلى مثال test.py لكن هذا لا يعني أنه لا يوجد وثائق. يمكنك أن تبدأ بقراءة
الأسئلة الشائعة
ما هو عكاشة ؟
هو إطار ويب لعمل تطبيقات ويب متطوّرة بلغة البرمجة بايثون متوافقة مع مبدأ ويز-جي WSGI بكل بساطة وسهولة.
من هو عكاشة ؟
هو الصحابي الجليل عكاشة بن محصن1) رضي الله عنه وهو ممّن يدخلون الجنّة بلا حساب ولا عذاب. قال عنه ابن حجر في الإصابة: من السابقين الأوّلين وشهد بدراً، وقع ذكره في الصحيحين في حديث ابن عباس في السبعين ألفاً الذين يدخلون الجنة بغير حساب، فقال عكاشة: ادع الله أن يجعلني منهم. قال: “أنت منهم”. فقام آخر فقال: “سبقك بها عكاشة”. قيل: استشهد عكاشة في قتال أهل الرّدة.
ما معنى الكلمة ؟
في القاموس المحيط نجد أنها العَنْكَبوتُ، أو ذُكُورها، أو بَيْتُها (…) عُكاشَةُ الغَنَوِيُّ، وابنُ ثَوْرٍ، وابنُ مِحْصَنٍ، الصحابِيُّونَ.
ذكر ابن منظور في لسان العرب تحت جذر عكش: عكَشَ عليه: حَمَلَ. وعَكِش النباتُ والشعرُ وتعَكَّش: كَثُرَ والتفَّ. وكلُّ شيءٍ لزم بعضُه بعضاً فقد تَعَكَّشَ. وشعرٌ عَكِشٌ ومُتَعَكِّشُ إِذا تلبَّد. وشعر عَكِشُ الأَطراف إِذا كان جَعْداً (…) وشجرة عَكِشَةٌ: كثيرةُ الفروع مُتَشَجِّنةٌ. والعُكَاشة والعُكَّاشةُ: العنكبوت: وبها سمي الرجل. (…) وعُكَيْشٌ وعُكَّاشةُ وعَكَّاشٌ: أَسماء. (…) وعُكَّاشة بن مِحْصن الأَسدي: من الصحابة، وقد يخفّف.
الشكر لأخي طه الزروقي الذي اختار الاسم.
من أين أحصل عليه ؟
كود عكاشة متوفّر من خلال بوتقة أعجوبة
للحصول على آخر إصدار اتبع الرابط التالي
لماذا لم يكتب على php كبقية التطبيقات في العالم ؟
لغة php ليست لغة نظيفة خصوصا في ما يتعلق بدعم utf-8
هل هو وفق بُنية MVC ؟
نعم تستطيع أن تقول ذلك. إذ يشكّل الصنف baseWebApp المتحكّم Controller ويترك لك الإطار اختيار أي كائن بايثوني ليكون النموذج Model (الذي قد يكون مصدره من قاعدة بيانات عبر elixir) وتحدّد أي نظام قوالب تريد ليكون عنصر العرض.
هل يدفع أم يسحب ؟
أطر الويب نوعان push-based و pull-based. الأول تقوم بالمعالجة ثم يدفع بالنتائج والثاني يقوم بعرض صفحة من القالب ثم يسحب النتائج إليها عبر مصادر متعدّدة.
يمكن تطبيق النمطين في حالة عكاشة. يمكنك أن تدفع بالقيم إلى قالب ليتم عرضها، كما ويمكنك البدء بصفحة هيكلية ثم سحب عدة مكونات فيها عبر ajax مثلا باستخدام قالب jsonDumps.
أين تضعه مقارنة بالأطر البايثونية الأخرى ؟
يمتاز عكاشة عن كل أطر الويب التي اختبرتها بالبساطة لهذا أُعرّفه إطار الويب البدهي trivial web framework أو إطار الويب الذي لا يقوم بشيء do nothing web framework بمعنى أنه لا يقف في طريقك ولن يكون صعبا عليك أن تدرك كل ما يحيط به في ذاكرتك دون الرجوع للوثائق.
عكاشة أقرب ما يكون إلى cherrypy وأبعد ما يكون عن django
الكثير من أطر الويب تحدّد لك نموذج البيانات ومحرّك القوالب وغير ذلك من العوامل، كذلك فإنّها غالبا تتطلّب عمل شجرة معقّدة من الملفات والإعدادات، بل إنّها في الغالب تأتي مع برنامج يعمل تلك الشجرة لتشابكها فيقوم البرنامج بعمل الكثير من الملفات التي قد لا تتمكن من هضمها كلها.
في Pylon يتم تعريف طريقة التعامل مع URL من خلال مكتبة routes الذي بدوره يحاكي RoR حيث تربط أنت نمط من العناوين مع دالة معينة. في حين أن طريقة الربط محدّد مسبقا في عكاشة بحيث تمنعك من “إطلاق النار على نفسك!”
باختصار إن إطار عكاشة هو تطبيق لمبدأ بايثوني معروف وهو أن الصريح أفضل من الضمني والبسيط أفضل من المعقد.
كيف يمكنني اختبار برنامجي ؟
يمكنك إطلاق خادم ضمني صغير يقوم بتشغيل تطبيق الويب دون الحاجة لخادم apache.
أين أجد هكذا خادم ضمني ؟
بما أنه مطابق لمعايير WSGI يمكنك استخدام أي خادم ضمني يدعمها. أفضل مثال على ذلك هو عبر مكتبة python-paste وهي مكتبة بايثونية صرفة لا يزيد حجمها عن واحد ونصف ميغابايت. وهي تعمل على كل الأنظمة بما فيها ويندوز.
كيف يمكنني نشر تطبيق الويب ؟ وأي الاستضافات تدعمه ؟
إن هناك عشرات الطرق لإطلاق تطبيقات عكاشة شأنه في ذلك شأن تطبيقات WSGI حيث أنها معايير كتابة تطبيقات الويب في بايثون. ومن هذه الطرق
- عبر برنامج wrapper صغير يجعلها تعمل كتطبيق CGI على أي خادم يدعم CGI أو FastCGI أو ما شابه
- عبر mod_wsgi في خادم apache
- عبر mod_python في خادم apache (لكنه يحتاج wrapper ولا ننصح بها)
- عبر خوادم ضمنية منضددة مثل python-paste
- عبر تشغيل الخادم الضمني ثم عمل وكيل له proxy من خلال mod_proxy من داخل apache
للمزيد انظر صفحة طرق النشر