هو اطار عمل مبنى على مكتبات Zope
التستيب
بكل سهولة
وبعد كدا
striky@striky-desktop:~/workspace/pytut/src/nettut$ mkdir groktut
striky@striky-desktop:~/workspace/pytut/src/nettut$ cd groktut/
وقم بتنفيذ grokproject والحقه بإسم المشروع
striky@striky-desktop:~/workspace/pytut/src/nettut/groktut$ grokproject FirstProject
اسم المدير وليكن grok
Enter user (Name of an initial administrator user): grok
كلمة السر (لن تظهر تم استخدام getpass لإلغاء ظهورها) اكتبها grok
Enter passwd (Password for the initial administrator user):
Downloading info about versions...
Creating directory ./FirstProject
Invoking zc.buildout...
Develop: '/home/striky/workspace/pytut/src/nettut/groktut/FirstProject/.'
Installing eggbasket.
Getting distribution for 'grok==0.14.1'.
eggbasket: Distributions are not installed. A tarball will be downloaded.
eggbasket: Distributions are not installed. A tarball will be downloaded.
eggbasket: Downloading http://grok.zope.org/releaseinfo/grok-eggs-0.14.1.tgz ...
eggbasket: Downloading http://grok.zope.org/releaseinfo/grok-eggs-0.14.1.tgz ...
eggbasket: Finished downloading.
eggbasket: Finished downloading.
eggbasket: Extracting tarball contents...
eggbasket: Extracting tarball contents...
eggbasket: Installing eggs to /home/striky/.buildout/eggs which will take a while...
eggbasket: Installing eggs to /home/striky/.buildout/eggs which will take a while...
Getting distribution for 'grok==0.14.1'.
Got grok 0.14.1.
الآن انت جاهز
striky@striky-desktop:~/workspace/pytut/src/nettut/groktut$ cd FirstProject/
اعرض ال tree
striky@striky-desktop:~/workspace/pytut/src/nettut/groktut/FirstProject$ tree
.
|-- bin
| |-- buildout
| |-- i18nextract
| |-- i18nmergeall
| |-- i18nstats
| |-- test
| `-- zopectl
|-- bootstrap.py
|-- buildout.cfg
|-- develop-eggs
| `-- FirstProject.egg-link
|-- parts
| |-- app
| | |-- debugzope
| | |-- runzope
| | `-- site.zcml
| |-- data
| |-- i18n
| | `-- configure.zcml
| |-- test
| `-- zopectl
| |-- zdaemon.conf
| `-- zope.conf
|-- setup.py
|-- src
| |-- FirstProject.egg-info
| | |-- PKG-INFO
| | |-- SOURCES.txt
| | |-- dependency_links.txt
| | |-- entry_points.txt
| | |-- not-zip-safe
| | |-- requires.txt
| | `-- top_level.txt
| `-- firstproject
| |-- __init__.py
| |-- app.py
| |-- app.txt
| |-- app_templates
| | `-- index.pt
| |-- configure.zcml
| |-- ftesting.zcml
| |-- static
| | `-- README.txt
| `-- tests.py
`-- versions.cfg
13 directories, 32 files
الهيكلية واضحة ملفات تنفيذيه وtemplates وملفات static واعدادات الخ الخ
قم بتشغيل zope

قم بتسمية التطبيق مثلا hello

اكتب فى المتصفح ذلك العنوان

ستجد امامك نافذة مشابهه لهذه تخبرك بمسار ال templates لتعديلها وهى فى المسار firstprojct/app_templates/index.pt
الهيكلية كالتالى
striky@striky-desktop:~/workspace/pytut/src/nettut/groktut/FirstProject/src/firstproject$ tree
.
|-- __init__.py
|-- __init__.pyc
|-- app.py
|-- app.pyc
|-- app.txt
|-- app_templates
| `-- index.pt
|-- configure.zcml
|-- ftesting.zcml
|-- static
| `-- README.txt
`-- tests.py
2 directories, 10 files
قم بفتح ذلك الملف index.pt فى ال app_templates ستجده مشابه للتالى
<html>
<head>
</head>
<body>
<h1>Congratulations!</h1>
<p>Your Grok application is up and running.
Edit <code>firstproject/app_templates/index.pt</code> to change
this page.</p>
</body>
</html>
قم بتعديله للتالى مثلا
<html>
<head>
<title>Index</title>
</head>
<body>
<h1>Congratulations!</h1>
<p>
<b>Grok</b> is up & running
</p>
</body>
</html>
وقم بعمل رفرش او اذهب لذلك العنوان

الآن التطبيق لديه view واحدة وهى index التى يتم عند استدعاءها عرض الtemplate فى الملف index.pt
افتح الملف app.py ستجده مشابه للتالى
import grok
class Firstproject(grok.Application, grok.Container):
pass
class Index(grok.View):
pass # see app_templates/index.pt
قم بإضافة 2 views وهما Hi, Bye
class Hi(grok.View):
pass #renders app_templates/hi.pt
class Bye(grok.View):
pass #renders app_templates/bye.pt
قم بإنشاء الملفات hi.pt و bye.pt ليتم عرضها عند استدعاء تلك الviews
الملف hi.pt
<html>
<head>
<title>Hi</title>
</head>
<body>
<h1>Welcome to Grok!</h1>
</body>
</html>
الملف bye.pt
<html>
<head>
<title>Bye</title>
</head>
<body>
<h1>Have to go :(</h1>
</body>
</html>
عند استدعاء ال hi view

عند استدعاء ال bye.view

ملحوظة: قد تريد احيانا تغيير رقم البورت الإفتراضى لzope بدل من 8080 (اللذى قد تكون اسندته لخدمة اخرى او غيره)
كل ماعليك هو اعداد ملف buildout.cfg فى القسم [zopectl]
بإضافة ذلك السطر
address = localhost:8012
#controlling the listening port, re-run buildout script.
وقم بتشغيل ملف ال buildout
striky@striky-desktop:~/workspace/pytut/src/nettut/groktut/FirstProject$ bin/buildout
Develop: '/home/striky/workspace/pytut/src/nettut/groktut/FirstProject/.'
Uninstalling zopectl.
Updating eggbasket.
Updating app.
Updating data.
Installing zopectl.
Generated script '/home/striky/workspace/pytut/src/nettut/groktut/FirstProject/bin/zopectl'.
Updating i18n.
The recipe for i18n doesn't define an update method. Using its install method.
i18n: setting up i18n tools
Updating test.
Where to Go?
تستطيع الذهاب الى
http://grok.zope.org وتقوم بقراءة الوثائق الخاصة وتنشئ بعض التطبيقات الحقيقية
Webpy
[/b]
فريمورك بسيطة وممتازة وغير معقدة لاتحتاج منك الكثير من المفاهيم ومبنية من اجل البساطة (ربما اذا اكملت الكتاب للآن تستطيع ان تفهم كودها المصدرى )
للتستيب
او قم بتحميلها من الموقع الرسمى
http://webpy.orgوقم بتشغيل سكربت ال setup
ابسط تطبيق
import web
urls = (
'/(.*)', 'index'
)
class index:
def GET(self, name):
return 'Hello, World!'
app = web.application(urls, globals())
if __name__ == "__main__":
app.run()
1- استدعاء webpy
2- انشاء ال urls على صورة tuple
على سبيل المثال هنا هيتم توجيه اى طلب الى الview المسماة index اللتى قمنا بتعريفها كالتالى
class index:
def GET(self, name):
return 'Hello, World!'
اخيرا انشاء عنصر التطبيق
app = web.application(urls, globals())
وتشغيله بإستخدام الطريقة run

لاحظ هنا تشغيلنا للسرفر على البورت 3001 وذلك بإضافة ذلك المعامل الى السكربت عند التشغيل والاسيكون البورت 8080
striky@striky-desktop:~/workspace/pytut/src/nettut/webpytut$ python hello.py 3001
تجد العديد من الأمثلة هنا
مثال على انشاء بلوج بسيط بإستخدام webpy
تجده هنا
http://k4ml.com/wiki/python/webpy/simpleblog