1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ar"
lang="ar" dir="rtl">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>وثائق عكاشة</title>
<link rel="stylesheet" media="all" type="text/css" href="all.css" />
<link rel="stylesheet" media="screen" type="text/css" href="screen.css" />
<link rel="stylesheet" media="print" type="text/css" href="print.css" />
</head>
<body>
<div class="dokuwiki export">
<!-- TOC START -->
<div class="toc">
<div class="tocheader toctoggle" id="toc__header">جدول المحتويات</div>
<div id="toc__inside">
<ul class="toc">
<li class="level1"><div class="li"><span class="li"><a href="#إطار_الويب_عكاشة" class="toc">إطار الويب عكاشة</a></span></div>
<ul class="toc">
<li class="level2"><div class="li"><span class="li"><a href="#تمهيد" class="toc">تمهيد</a></span></div></li>
<li class="level2"><div class="li"><span class="li"><a href="#الوثائق" class="toc">الوثائق</a></span></div></li>
<li class="level2"><div class="li"><span class="li"><a href="#الأسئلة_الشائعة" class="toc">الأسئلة الشائعة</a></span></div>
<ul class="toc">
<li class="level3"><div class="li"><span class="li"><a href="#ما_هو_عكاشة" class="toc">ما هو عكاشة ؟</a></span></div></li>
<li class="level3"><div class="li"><span class="li"><a href="#من_هو_عكاشة" class="toc">من هو عكاشة ؟</a></span></div></li>
<li class="level3"><div class="li"><span class="li"><a href="#ما_معنى_الكلمة" class="toc">ما معنى الكلمة ؟</a></span></div></li>
<li class="level3"><div class="li"><span class="li"><a href="#من_أين_أحصل_عليه" class="toc">من أين أحصل عليه ؟</a></span></div></li>
<li class="level3"><div class="li"><span class="li"><a href="#لماذا_لم_يكتب_على_php_كبقية_التطبيقات_في_العالم" class="toc">لماذا لم يكتب على php كبقية التطبيقات في العالم ؟</a></span></div></li>
<li class="level3"><div class="li"><span class="li"><a href="#هل_هو_وفق_ب_نية_mvc" class="toc">هل هو وفق بُنية MVC ؟</a></span></div></li>
<li class="level3"><div class="li"><span class="li"><a href="#هل_يدفع_أم_يسحب" class="toc">هل يدفع أم يسحب ؟</a></span></div></li>
<li class="level3"><div class="li"><span class="li"><a href="#أين_تضعه_مقارنة_بالأطر_البايثونية_الأخرى" class="toc">أين تضعه مقارنة بالأطر البايثونية الأخرى ؟</a></span></div></li>
<li class="level3"><div class="li"><span class="li"><a href="#كيف_يمكنني_اختبار_برنامجي" class="toc">كيف يمكنني اختبار برنامجي ؟</a></span></div></li>
<li class="level3"><div class="li"><span class="li"><a href="#أين_أجد_هكذا_خادم_ضمني" class="toc">أين أجد هكذا خادم ضمني ؟</a></span></div></li>
<li class="level3"><div class="li"><span class="li"><a href="#كيف_يمكنني_نشر_تطبيق_الويب_وأي_الاستضافات_تدعمه" class="toc">كيف يمكنني نشر تطبيق الويب ؟ وأي الاستضافات تدعمه ؟</a></span></div></li>
</ul>
</li>
</ul>
</li>
</div>
</div>
<!-- TOC END -->
<h1 class="sectionedit1"><a name="إطار_الويب_عكاشة" id="إطار_الويب_عكاشة">إطار الويب عكاشة</a></h1>
<div class="level1">
</div>
<!-- EDIT1 SECTION "إطار الويب عكاشة" [1-46] -->
<h2 class="sectionedit2"><a name="تمهيد" id="تمهيد">تمهيد</a></h2>
<div class="level2">
<p>
<a href="../files/logo.png" class="media" title="okasha:logo.png"><img src="../files/logo.png" class="medialeft" align="left" title="إطار الويب عكاشة" alt="إطار الويب عكاشة" width="128" /></a>
إنّ مواقع الإنترنت الناجحة ليست مجرّد صفحات <acronym title="HyperText Markup Language">HTML</acronym> ساكنة بل إنّ أغلبها تحتوي على محتويات تفاعلية (تستخدم حسابات أو قواعد بيانات وتتفاعل مع المستخدمين وتسمح لهم بالتعليق والتواصل معاً)، يتم توليد المحتويات عبر لغات برمجة تنفّذ على الخادم.
</p>
<p>
إنّ تطوير تطبيقات الويب يحتوي على الكثير من الأمور الرتيبة المملّة، ومن هنا ظهرت الحاجة لأطر الويب web frameworks
</p>
<p>
تمّ تطوير إطار الويب عكاشة أساساً من أجل عمل تطبيق الويب في <a href="/wiki/thawab/%D8%A7%D9%84%D8%B5%D9%81%D8%AD%D8%A9_%D8%A7%D9%84%D8%A3%D9%88%D9%84%D9%89" class="wikilink1" title="thawab:الصفحة_الأولى">مشروع ثواب</a> ثم رأيت فصله حتى يمكن الاستفادة منه في عمل تطبيقات أخرى حيث أنه كود عام يصلح لأي تطبيق ويب.
</p>
</div>
<!-- EDIT2 SECTION "تمهيد" [47-1064] -->
<h2 class="sectionedit3"><a name="الوثائق" id="الوثائق">الوثائق</a></h2>
<div class="level2">
<p>
إن أفضل وثيقة لفهم عكاشة هي بالنظر إلى الكود وإلى مثال test.py لكن هذا لا يعني أنه لا يوجد وثائق.
يمكنك أن تبدأ بقراءة
</p>
<ul>
<li class="level1"><div class="li"> <a href="sample1.html" class="wikilink1" title="okasha:sample1">مثال أولي بسيط</a></div>
</li>
<li class="level1"><div class="li"> <a href="deployment.html" class="wikilink1" title="okasha:deployment">طرق النشر</a></div>
</li>
<li class="level1"><div class="li"> <a href="templates.html" class="wikilink1" title="okasha:templates">القوالب</a></div>
</li>
<li class="level1"><div class="li"> <a href="elixir.html" class="wikilink1" title="okasha:elixir">قواعد البيانات عبر الإكسير</a></div>
</li>
</ul>
</div>
<!-- EDIT3 SECTION "الوثائق" [1065-1366] -->
<h2 class="sectionedit4"><a name="الأسئلة_الشائعة" id="الأسئلة_الشائعة">الأسئلة الشائعة</a></h2>
<div class="level2">
</div>
<!-- EDIT4 SECTION "الأسئلة الشائعة" [1367-1408] -->
<h3 class="sectionedit5"><a name="ما_هو_عكاشة" id="ما_هو_عكاشة">ما هو عكاشة ؟</a></h3>
<div class="level3">
<p>
هو إطار ويب لعمل تطبيقات ويب متطوّرة بلغة البرمجة بايثون متوافقة مع مبدأ ويز-جي WSGI بكل بساطة وسهولة.
</p>
</div>
<!-- EDIT5 SECTION "ما هو عكاشة ؟" [1409-1624] -->
<h3 class="sectionedit6"><a name="من_هو_عكاشة" id="من_هو_عكاشة">من هو عكاشة ؟</a></h3>
<div class="level3">
<p>
هو الصحابي الجليل عكاشة بن محصن<sup><a href="#fn__1" name="fnt__1" id="fnt__1" class="fn_top">1)</a></sup> رضي الله عنه وهو ممّن يدخلون الجنّة بلا حساب ولا عذاب. قال عنه ابن حجر في الإصابة: من السابقين الأوّلين وشهد بدراً، وقع ذكره في الصحيحين في حديث ابن عباس في السبعين ألفاً الذين يدخلون الجنة بغير حساب، فقال عكاشة: ادع الله أن يجعلني منهم. قال: “أنت منهم”. فقام آخر فقال: “سبقك بها عكاشة”. قيل: استشهد عكاشة في قتال أهل الرّدة.
</p>
</div>
<!-- EDIT6 SECTION "من هو عكاشة ؟" [1625-2438] -->
<h3 class="sectionedit7"><a name="ما_معنى_الكلمة" id="ما_معنى_الكلمة">ما معنى الكلمة ؟</a></h3>
<div class="level3">
<p>
في القاموس المحيط نجد أنها العَنْكَبوتُ، أو ذُكُورها، أو بَيْتُها (…) عُكاشَةُ الغَنَوِيُّ، وابنُ ثَوْرٍ، وابنُ مِحْصَنٍ، الصحابِيُّونَ.
</p>
<p>
ذكر ابن منظور في لسان العرب تحت جذر عكش: عكَشَ عليه: حَمَلَ. وعَكِش النباتُ والشعرُ وتعَكَّش: كَثُرَ والتفَّ. وكلُّ شيءٍ لزم بعضُه بعضاً فقد تَعَكَّشَ. وشعرٌ عَكِشٌ ومُتَعَكِّشُ إِذا تلبَّد. وشعر عَكِشُ الأَطراف إِذا كان جَعْداً (…) وشجرة عَكِشَةٌ: كثيرةُ الفروع مُتَشَجِّنةٌ. والعُكَاشة والعُكَّاشةُ: <strong>العنكبوت</strong>: وبها سمي الرجل. (…) وعُكَيْشٌ وعُكَّاشةُ وعَكَّاشٌ: أَسماء. (…) وعُكَّاشة بن مِحْصن الأَسدي: من الصحابة، وقد يخفّف.
</p>
<p>
الشكر لأخي طه الزروقي الذي اختار الاسم.
</p>
</div>
<!-- EDIT7 SECTION "ما معنى الكلمة ؟" [2439-3587] -->
<h3 class="sectionedit8"><a name="من_أين_أحصل_عليه" id="من_أين_أحصل_عليه">من أين أحصل عليه ؟</a></h3>
<div class="level3">
<p>
كود عكاشة متوفّر من خلال <a target="_blank" href="http://git.ojuba.org/cgit/okasha/about/" class="urlextern" title="http://git.ojuba.org/cgit/okasha/about/" rel="nofollow">بوتقة أعجوبة</a>
</p>
<p>
للحصول على آخر إصدار اتبع <a target="_blank" href="http://git.ojuba.org/cgit/okasha/snapshot/okasha-master.tar.bz2" class="urlextern" title="http://git.ojuba.org/cgit/okasha/snapshot/okasha-master.tar.bz2" rel="nofollow">الرابط التالي</a>
</p>
</div>
<!-- EDIT8 SECTION "من أين أحصل عليه ؟" [3588-3886] -->
<h3 class="sectionedit9"><a name="لماذا_لم_يكتب_على_php_كبقية_التطبيقات_في_العالم" id="لماذا_لم_يكتب_على_php_كبقية_التطبيقات_في_العالم">لماذا لم يكتب على php كبقية التطبيقات في العالم ؟</a></h3>
<div class="level3">
<p>
لغة php ليست لغة نظيفة خصوصا في ما يتعلق بدعم utf-8
</p>
</div>
<!-- EDIT9 SECTION "لماذا لم يكتب على php كبقية التطبيقات في العالم ؟" [3887-4069] -->
<h3 class="sectionedit10"><a name="هل_هو_وفق_ب_نية_mvc" id="هل_هو_وفق_ب_نية_mvc">هل هو وفق بُنية MVC ؟</a></h3>
<div class="level3">
<p>
نعم تستطيع أن تقول ذلك. إذ يشكّل الصنف baseWebApp المتحكّم Controller ويترك لك الإطار اختيار أي كائن بايثوني ليكون النموذج Model (الذي قد يكون مصدره من قاعدة بيانات عبر elixir) وتحدّد أي نظام قوالب تريد ليكون عنصر العرض.
</p>
</div>
<!-- EDIT10 SECTION "هل هو وفق بُنية MVC ؟" [4070-4484] -->
<h3 class="sectionedit11"><a name="هل_يدفع_أم_يسحب" id="هل_يدفع_أم_يسحب">هل يدفع أم يسحب ؟</a></h3>
<div class="level3">
<p>
أطر الويب نوعان <a target="_blank" href="http://en.wikipedia.org/wiki/Web_application_framework#Push-based_vs._Pull-based" class="urlextern" title="http://en.wikipedia.org/wiki/Web_application_framework#Push-based_vs._Pull-based" rel="nofollow">push-based و pull-based</a>. الأول تقوم بالمعالجة ثم يدفع بالنتائج والثاني يقوم بعرض صفحة من القالب ثم يسحب النتائج إليها عبر مصادر متعدّدة.
</p>
<p>
يمكن تطبيق النمطين في حالة عكاشة. يمكنك أن تدفع بالقيم إلى قالب ليتم عرضها، كما ويمكنك البدء بصفحة هيكلية ثم سحب عدة مكونات فيها عبر ajax مثلا باستخدام قالب jsonDumps.
</p>
</div>
<!-- EDIT11 SECTION "هل يدفع أم يسحب ؟" [4485-5163] -->
<h3 class="sectionedit12"><a name="أين_تضعه_مقارنة_بالأطر_البايثونية_الأخرى" id="أين_تضعه_مقارنة_بالأطر_البايثونية_الأخرى">أين تضعه مقارنة بالأطر البايثونية الأخرى ؟</a></h3>
<div class="level3">
<p>
يمتاز عكاشة عن كل أطر الويب التي اختبرتها بالبساطة لهذا أُعرّفه إطار الويب البدهي trivial web framework أو إطار الويب الذي لا يقوم بشيء do nothing web framework بمعنى أنه لا يقف في طريقك ولن يكون صعبا عليك أن تدرك كل ما يحيط به في ذاكرتك دون الرجوع للوثائق.
</p>
<p>
عكاشة أقرب ما يكون إلى <a target="_blank" href="http://www.cherrypy.org/" class="urlextern" title="http://www.cherrypy.org/" rel="nofollow">cherrypy</a>
وأبعد ما يكون عن <a target="_blank" href="http://www.djangoproject.com/" class="urlextern" title="http://www.djangoproject.com/" rel="nofollow">django</a>
</p>
<p>
الكثير من أطر الويب تحدّد لك نموذج البيانات ومحرّك القوالب وغير ذلك من العوامل، كذلك فإنّها غالبا تتطلّب عمل شجرة معقّدة من الملفات والإعدادات، بل إنّها في الغالب تأتي مع برنامج يعمل تلك الشجرة لتشابكها فيقوم البرنامج بعمل الكثير من الملفات التي قد لا تتمكن من هضمها كلها.
</p>
<p>
في Pylon يتم تعريف طريقة التعامل مع <acronym title="Uniform Resource Locator">URL</acronym> من خلال مكتبة
<a target="_blank" href="http://routes.groovie.org/" class="urlextern" title="http://routes.groovie.org/" rel="nofollow">routes</a> الذي بدوره يحاكي RoR حيث تربط أنت نمط من العناوين مع دالة معينة. في حين أن طريقة الربط محدّد مسبقا في عكاشة بحيث تمنعك من “إطلاق النار على نفسك!”
</p>
<p>
باختصار إن إطار عكاشة هو تطبيق لمبدأ بايثوني معروف وهو أن الصريح أفضل من الضمني والبسيط أفضل من المعقد.
</p>
</div>
<!-- EDIT12 SECTION "أين تضعه مقارنة بالأطر البايثونية الأخرى ؟" [5164-6903] -->
<h3 class="sectionedit13"><a name="كيف_يمكنني_اختبار_برنامجي" id="كيف_يمكنني_اختبار_برنامجي">كيف يمكنني اختبار برنامجي ؟</a></h3>
<div class="level3">
<p>
يمكنك إطلاق خادم ضمني صغير يقوم بتشغيل تطبيق الويب دون الحاجة لخادم apache.
</p>
</div>
<!-- EDIT13 SECTION "كيف يمكنني اختبار برنامجي ؟" [6904-7097] -->
<h3 class="sectionedit14"><a name="أين_أجد_هكذا_خادم_ضمني" id="أين_أجد_هكذا_خادم_ضمني">أين أجد هكذا خادم ضمني ؟</a></h3>
<div class="level3">
<p>
بما أنه مطابق لمعايير WSGI يمكنك استخدام أي خادم ضمني يدعمها. أفضل مثال على ذلك هو عبر مكتبة python-paste
وهي مكتبة بايثونية صرفة لا يزيد حجمها عن واحد ونصف ميغابايت. وهي تعمل على كل الأنظمة بما فيها ويندوز.
</p>
</div>
<!-- EDIT14 SECTION "أين أجد هكذا خادم ضمني ؟" [7098-7511] -->
<h3 class="sectionedit15"><a name="كيف_يمكنني_نشر_تطبيق_الويب_وأي_الاستضافات_تدعمه" id="كيف_يمكنني_نشر_تطبيق_الويب_وأي_الاستضافات_تدعمه">كيف يمكنني نشر تطبيق الويب ؟ وأي الاستضافات تدعمه ؟</a></h3>
<div class="level3">
<p>
إن هناك عشرات الطرق لإطلاق تطبيقات عكاشة شأنه في ذلك شأن تطبيقات WSGI حيث أنها معايير كتابة تطبيقات الويب في بايثون. ومن هذه الطرق
</p>
<ul>
<li class="level1"><div class="li"> عبر <a target="_blank" href="http://www.python.org/dev/peps/pep-0333/#the-server-gateway-side" class="urlextern" title="http://www.python.org/dev/peps/pep-0333/#the-server-gateway-side" rel="nofollow">برنامج wrapper صغير</a> يجعلها تعمل كتطبيق <acronym title="Common Gateway Interface">CGI</acronym> على أي خادم يدعم <acronym title="Common Gateway Interface">CGI</acronym> أو FastCGI أو ما شابه</div>
</li>
<li class="level1"><div class="li"> عبر <a target="_blank" href="http://code.google.com/appengine/docs/python/tools/webapp/utilmodule.html#run_wsgi_app" class="urlextern" title="http://code.google.com/appengine/docs/python/tools/webapp/utilmodule.html#run_wsgi_app" rel="nofollow">google app engine</a></div>
</li>
<li class="level1"><div class="li"> عبر mod_wsgi في خادم apache</div>
</li>
<li class="level1"><div class="li"> عبر mod_python في خادم apache (لكنه يحتاج wrapper ولا ننصح بها)</div>
</li>
<li class="level1"><div class="li"> عبر خوادم ضمنية منضددة مثل python-paste</div>
</li>
<li class="level1"><div class="li"> عبر تشغيل الخادم الضمني ثم عمل وكيل له proxy من خلال <a target="_blank" href="http://httpd.apache.org/docs/2.0/mod/mod_proxy.html" class="urlextern" title="http://httpd.apache.org/docs/2.0/mod/mod_proxy.html" rel="nofollow">mod_proxy</a> من داخل apache </div>
</li>
</ul>
<p>
للمزيد انظر صفحة <a href="deployment.html" class="wikilink1" title="okasha:deployment">طرق النشر</a>
</p>
</div>
<!-- EDIT15 SECTION "كيف يمكنني نشر تطبيق الويب ؟ وأي الاستضافات تدعمه ؟" [7512-] --><div class="footnotes">
<div class="fn"><sup><a href="#fnt__1" id="fn__1" name="fn__1" class="fn_bot">1)</a></sup>
هو عكاشة بن محصن بن حرثان بن قيس بن مرة بن كبير بن غنم بن دودان بن أسد بن خزيمة</div>
</div>
</div>
</body>
</html>
|