Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. Python
Code

بايثون من الصفر- إنشاء موقع ويب ديناميكي

by
Length:LongLanguages:
This post is part of a series called Python from Scratch.
Python from Scratch: Object Oriented Programming

Arabic (العربية/عربي) translation by Mustapha Benbihi (you can also view the original English article)

تطرقنا لقدر لا بأس به من بايثون في الحصة السابقة من هذه الدورة. اليوم، سندمج كل ما تعلمناه إلى حد الآن لإنشاء موقع ديناميكي باستخدام بايثون.


هل تفضل فيديو تعليمي؟

إذن، كيف تبدأ إنشاء مواقع باستخدام بايثون؟ حسنا، يمكن ان تقوم بذلك بنفسك، وتكتب برنامج يعمل على خادم ويب، مستقبلا طلبات الصفحات ومرسلا إجابات على شكل ايتش تي إم إل (HTML) ومصادر أخرى. لكن، ههذا يتطلب الكثير من العمل، إذن لماذا القبول بكل هذا العناء ما دام هنالك الكثير من الأدوات التي يمكنها القيام بالعمل لصالحك؟ هذه الأدوات تسمى إطارات ( Framworks)، وهي ما سنستخدم اليوم لإنشاء موقعنا.

إطارات بايثون 

يوجد العديد من إطارات الويب الخاصة ببايثون، لكن هذه بعض أفضلها:

  • دجانجو - سنستخدم هذا اليوم. له مجموعة ضخمة من المميزات، لكنه يظل سهل الاستخدام. الثوثيق أيضاً ممتاز، لذلك إذا واجهتك مشكلة سيكون لديك أسهل وقت لحل مشكلتك مع دجانجو.
  • جروك - إطار أخر بمجموعة مميزات قريبة من دجانجو. إذا قررت أنك لا تفضل دجانجو فهذا بديل جيد.
  • ويبباي - إطار ذو وزن خفيف. ليس لديه العديد من المميزات، على الرغم من أنه يعطي القوة لفترة من الوقت!
  • توربوجيرس - على الرغم من أنه كانت لديه سمعة سيئة نظراً للثوثيق الضعيف، إلا أن توربوجيرس تحسن جوهرياً في السنة الماضية.

توجد قائمة أكثر شمولاً على موقع بايثون إذا كنت تحتاج إلى خيارات إضافية. اليوم سنقوم بضبط بايثون للتطوير على جهاز محلي، ومن ثم بناء مدونة بسيطة.   سنقوم أيضاً بمراجعة منهجية تثبيته على خادم ويب.


تثبيت دجانجو

سنقوم بمعظم عملنا على المحطة النهائية (Terminal) هذا يجب أن نعمل على لينكس وماك. لكن، إذا كنت تشتغل على ويندوز، فالمنهجية مختلفة نوعا ما. ليس ضرورياً أن يكون لك إلمام بسطر الأوامر إذا كنت تكتب بايثون فقط، لكن، إذا كنت تخطط لاستخدام دجانجو، أو تشغيل موقع ويب ديناميكي عموماً، فذلك يستحق التعلم.

دورات المحطة النهائية

إعتبر مراجعة هذه الدورات لتكون في مسار تعلم المحطة النهائية.

إليك الأوامر التي ستحتاج لتثبيث دجانجو. إنه غير متوافق مع بايثون 3, لذلك ستحتاج لتثبيث النسخة 2.7 أو ما قبلها لجعله يشتغل. 

بعد ذلك، يمكننا اختياريا حذف ملفات التثبيث.

هذا سيقوم بذلك!  دعونا نختبره.

يجب أن ترى '1.3.1'. إذا كان الأمر كذلك، كل شيء قد إشتغل ودجانجو مثبت على نظامك. تهانينا! نحن جاهزون لبدء إنشاء موقعنا!


بناء مدونتنا

سنقوم ببناء نظام مدونة اليوم، لأنها طريقة ممتازة لتعلم الأساسيات. بدايةً، نحتاج لإحذات مشروع دجانجو.

بماذا يقوم كل واحد من هذه الملفات؟

  • __init__.py يخبر بايثون أن هذا المجلد هو عبارة عن سلسلة من إجراءات بايثون. تعلمنا عن هذه في الدرس الثالث؛ إنها تسمح لبايثون باستيراد كل البرامج النصية في المجلد على شكل وحدات.
  • manage.py ليس في الواقع جزءًا من موقعك؛ إنه برنامج خدمة نصي تقوم بتشغيله من خط الأوامر.  يحتوي على مصفوفة من الدوال لإدارة موقعك.
  • settings.py يحتوي على إعدادات موقعك. دجانجو لا يستخدم ملفات إكس إم إل (XML) للإعداد؛ كل شيء عبارة عن بايثون.  هذا الملف هو مجرد عدد من المتغيرات التي تحدد ضبط موقعك. 
  • urls.py  هو الملف الذي يقوم بتعيين الروابط (URLs) نحو الصفحات.        مثلاً، يستطيع تعيين  yourwebsite.com/about لصفحة حولنا.

دجانجو يشير إلى نفسه كإطار إم تي في (MTV)، والتي تعني قالب نموذج  عرض (Model Template View).

تطبيقات

لكن لا أحد من هذه الملفات لوحده يشكل موقع وظفي.  لهذا، نحتاج إلى التطبيقات.  التطبيقات هي المكان الذي تكتب فيه الرمز (code) الذي يجعل موقعك يعمل، لكن قبل أن نلقي نظرة عليها، نحتاج أن نفهم قليلاً حول مبادئ تصميم دجانجو.

أولاً، دجانجو إطار إم في سي (MVC)، ما يعني قالب موجه نموذج العرض (Model View Controller). دجانجو يشير إلى نفسه كإطار إم تي في (MTV)، والتي تعني قالب نموذج  عرض (Model Template View). إنها مقاربة مختلفة قليلا من إم في سي (MVC)، ولكن في الأساس، هي متشابهة جداً.  على كل حال، إم في سي هو نمط هندسي يعطي طريقة لهيكلة مشاريعك.  إنه يفصل الرمز المستخدم لمعالجة البيانات من الرمز الذي يدير واجهة المستخدم. 

ينخرط دجانجو في فلسفة "لا تكرر نفسك".

ثانياً, ينخرط دجانجو في فلسفة لا تكرر نفسك, مما يعني أنه لا يجب عليك أبداً كتابة رمز يقوم بمهمة معينة أكثر من مرة واحدة. مثلاً، في مدونتنا، إذا كتبنا خاصية تختار مقال عشوائي من الأرشيف، وقمنا بإدماج هذه الخاصية في صفحات متعددة، لا نحتاج إلى كتابتها في كل مرة احتيج إليها.  كنا سنكتبها مرةً واحدة ومن ثمة نستخدمها في كل صفحة. 

إذاً كيف يرتبط هذا بالتطبيقات؟ حسناً، التطبيقات تسمح لك بكتابة موقعك في نمط لا تكرر نفسك. كل مشروع، مثل هذا الذي لدينا هنا، يمكن أن يحتوي على تطبيقات متعددة.  عكسياً، كل تطبيق يمكن أن يكون جزءًا من مشاريع متعددة. باستخدم المثل السابق، هذا يعني أنه إذا انشأنا موقع أخر في المستقبل وكان بدوره بحاجة إلى خاصية الصفحة العشوائية، لن نكون بحاجة إلى كتابتها من جديد. يمكننا ببساطة إستيراد التطبيق من هذا المشروع. لأجل هذا، من الضروري أن يخدم كل تطبيق غرض منفصل.  إذا كتبت كل وظائف موقعك في تطبيق واحد، ثم احتجت لاستخدام جزء منه لاحقاً، يجب عليك استيراده بكامله.  إذا كنت تنشئ موقع تجارة إلكترونية، مثلاً، فأنت لا تود إستيراد كل خاصيات المدونة.  على العكس من ذلك، إذا انشأت تطبيق واحد للخاصية العشوائية وتطبيق أخر لنظام نشر المدونة، يمكنك إنتقاء وإختيار الأجزاء التي تحتاج. 

هذا أيضاً يعني أن الرموز منظمة بشكل جيد داخل الموقع.  إذا أردت أن تغير خاصية ما، فلا يجب عليك البحث في ملف واحد ضخم، يمكنك بدلاً من ذلك التصفح باتجاه التطبيق المعني بالأمر وتغييره دون القلق بشأن التداخل مع أي شيء أخر. 

مرة أخرى، لدينا ملف __init__.py لجعله سلسلة اجراءت، وثلات ملفات أخرى:  نماذج (Models)، تجارب (Tests) ومشاهد (Views). لا داعي لأن نقلق بشأن تجارب حالياً، لكن الإثنين الأخرين مهمين. نماذج ومشاهد هما الأجزاء M و V في MVC.

في النماذج، نعرف بهياكل بيناتنا. 

إذا سبق لك أن عملت على بي إتش بي (PHP) سابقاً، من الممكن أنك استخدمت بي إتش بي ماي أدمن  (PhpMyAdmin) لإنشاء جداول ماي إس كيو إل (MySQL) الخاصة بك، ثم كتبت تساؤلات إس كيو إل (SQL queries)يدوياً في برامج بي إتش بي النصية (PHP scripts) الخاصة بك. في دجانجو، ذلك أكثر سهولة.  نعرف كل هياكل البيانات التي نحتاجها في ملف النماذج هذا، ثم نعطي أمراً وتصبح كل قواعد البيانات الضرورية جاهزة لصالحنا. 

عندما تريد الوصول إلى تلك البيانات، تذهب عن طريق هذه النماذج بتطبيق منهج (method) عليها، بدلاً من تشغيل تساؤلات خامة (raw queries). هذا مفيد جداً، لأن دجانجو يمكنه استخدام برامج قواعد بيانات متعددة.  اليوم سنستخدم ماي إس كيو إل، لأنه الأكثر قوة، وهو ما يزود به أكثر المضيفين، لكن إذا احتجنا أن نغير باتجاه قاعدة بيانات أخرى في المستقبل، كل الرموز ستظل صالحة.  في لغات برمجة أخرى، إذا ارادت أن تغير باتجاه إس كيو لايت (SQLite) أو ما شابه، ستحتاج إلى إعادة كتابة الرمز الذي يصل إلى قاعدة بياناتك. 

في ملف المشاهد، كتبنا الرمز الذي يولد الصفحات. هذا يربط كل الأجزاء الأخرى معا. عندما يكتب مستخدم رابط URL، يتم ارسله من قبل  البرنامج النصي urls الذي رأينا سابقاً إلى البرنامج النصي views، الذي يحصل بعد ذلك على البيانات المناسبة من النماذج، يعالجها ثم يمررها على  شكل قالب، الذي يخدم في النهاية على شكل الصفحة التي يراها المستخدم. سنلقي نظرة على تلك القوالب بعد فترة وجيزة.  انها الجزء الأسهل - جلها إتش تي إم إل.

لمدونة، سنحتاج لجدول مقالات، بخانات متعددة للعنوان، نص المقال، الكاتب، الوقت الذي تمت كتابته فيه، وما إلى ذلك.   مدونة حقيقية يجب أن تحتوي على تعليقات، لكن هذا خارج نطاق عرض اليوم. 

MySQL

هذه النماذج مجرد وصف. في الواقع نحتاج أن نصنع منها قاعدة بيانات. لكن، أولاً، نحتاج  أن يشتغل MySQL على نظامنا. على خادم ويب فعلي، هذا لن يكون مشكلاً، لأنه يكون مثبت لديهم مسبقاً.  لحسن الحظ، إنه سهل التثبيت باستخدام مثبت رزم. أولاً، تحتاج أن تثبت هومبرو(Homebrew) و ايزي انسطال (Easy Install)

عندما تعيد التشغيل،  لن يكون MySQL شغالاً، إذاً في كل مرة تحتاج أن تفعل هذا في المستقبل، شغل mysqld لتشغيل الخادم. يمكنك بعد ذلك تشغيل  python2.6 manange.py runserver في نافذة جديدة لبدء خادم التطوير.

هذا الأمر لن يشغل الخادم بعد، سيعيد خطأ فقط. هذا لأننا نحتاج لتهيئة إعداداتنا. دعونا نلقي نظرة على settings.py

تحتاج أن تغير إعدادات قاعدة البيانات أولاً. هذه تبدأ في السطر الثاني عشر.

إذا حاولت تشغيل الخادم مرةً اخرى، يجب أن يعمل، شريطة أنك ثبتت MySQL بنجاح. إذا زرت 127.0.0.1:8000 في متصفح الويب الخاص بك؛ يجب أن ترى صفحة دجانجو الإفتراضية. 

الأن دعونا نحول موقع دجانجو الخاص بنا إلى مدونة. أولاً، نحتاج أن نستخدم النماذج الخاصة بنا لإنشاء جداول في قاعدة البيانات وذلك بتشغيل الأمر التالي:

في كل مرة تغير النماذج الخاصة بك، يجب عليك تشغيل هذا الأمر لتحذيث قاعدة البيانات.  تذكر أن هذا لن يغير حقول البيانات الحالية؛ بل سيضيف حقول جديدة فقط. إذاً إذا أردت أن تحذف حقولاً، يجب عليك القيام بذلك يدوياً باستخدام شيء من قبيل PhpMyAdmin. لأن هذه أول مرة قمنا بتشغيل الأمر، سيقيم دجانجو كل الجداول المبنية فيه لأشياء مثل إدارة النظام.  فقط اكتب 'yes' وقم بإدخال تفاصيلك. 

الأن دعونا نهيئ ملف urls.py. لقول url(r'^$', 'FirstBlog.blog.views.home', name='home') .

الآن، دعونا ننشئ ملف المشاهد للإستجابة لهذه الطلبات.

قوالب

ملف index.html هذا ليس موجوداً بعد، إذاً هيا ننشئه.  قم بإنشاء مجلد، إسمه templates في تطبيق blog وسجل فيه ملف إسمه index.html، والذي يمكن ان يشمل "Hello World" حالياً. ثم، نحتاج أن نعدل ملف الإعدادات حتى يعرف دجانجو أين توجد هذه القوالب.

السطر 105 هو أين يبدأ الجزء الخاص بملف القوالب؛ إذاً عدله، كما يلي:

ادى شغلت الخادم مرةً أخرى وحذثت الصفحة في متصفحك، يجب أن ترى رسالة "Hello World".  يمكننا الأن البدء في رسم المدونة الخاصة بنا. سنضيف بعد ال-HTML المتداول للصفحة الرئيسية.

إذا حفظت وحذثت الصفحة، يجب أن ترى أن الصفحة قد تم تحذيثها بالمحتوى الجديد. الخطوة القادمة هي إضافة محتوى ديناميكي من قاعدة البيانات. للقيام بذلك، يتوفر دجانجو على لغة قوالب تسمح لك بإذماج متغيرات باستخدام معقوفات. غير وسط صفحتك ليصبح مثل ما يلي: 

يمكننا تمرير قيم لهذه المتغيرات النائبة من ملف views.py وذلك بإنشاء معجم  قيم. 

إحفظ وحذث، ثم يجب أن ترى أنك الأن تمرر المحتوى لقالب من ملف المشاهد الخاص بك.  الخطوة الأخيرة هي الحصول على البيانات من قاعدة بيناتنا وتمريرها بدلاً عن ذلك.  لحسن الحظ، يمكننا القيام بهذا كله دون تساؤلات SQL، باستخدام نماذج دجاندو. نحتاج أن نضيف تطبيق blog الخاص بنا لمشروع FirstBlog بتغيير  إعداد أخر.  إذهب إلى INSTALLED_APPS في السطر 112, وأضف 

إلى القائمة.

ثم غير views.py ليضيف البيانات من قاعدة البيانات.

بعد ذلك، حذث القلب للولوج إلى هذه البيانات. 

هنا، يمكننا الولوج إلى كل البيانات في جدولنا في ملف views.py، ثم نختار فقط العشر سجلات الأولى. نمرر هذه البيانات إلى القالب، ننتقل عبر ألسجلات ونظهر البيانات عن طريق HTML الموقع الخاص بنا. هذا لن يشتغل بعد، لأنه لا يوجد أي شيء في قاعدة البيانات.  أوقف الخادم و شغل: 

هذا سيضيف جدول التدوينات إلى قاعدة بيناتنا. ثم، إفتح نافذة جديدة واكتب:

...اكتب كلمة المرور الخاصة بك، إضغط زر الإدخال، ونفذ:

إرجع إلى النافذة السابقة وشغل الخادم مرةً أخرى. حذث الصفحة ويجب أن ترى تدوينة بالمحتوى الوهمي الذي قمت باضافته للتو. ادى قمت بتشغيل أمر MySQL مرات قليلة أخرى، يجب أن ترى مزيد من التدوينات تظهر على الصفحة عندما تقوم بالتحذيث.

نظام إدارة دجانجو

أخر شيء نحتاج أن نقوم به اليوم هو مراجعة نظام إدارة دجانجو. هذه ميزة قوية فعلاً تمكنك من إدارة موقعك دون كتابة المزيد من الرموز، كما كان يتوجب عليك إذا كنت تنشئ موقعاً من الصفر. لتفعيلها، نحتاج أن نغير بعض الإعدادات.  أولاً، أزل التعليق عن السطور 4, 5, 13 في ملف urls.py، كي تتمكن من الولوج إلى صفحة المدير. بعد ذلك، إذهب إلى جزء INSTALLED_APPS  في ملف settings.py وأزل التعليق عن 'django.contrib.admin'، و 'django.contrib.admindocs'، لتسمح للمدير بمراقبة جدول posts، انشئ ملف جديد إسمه admin.py في مجلد blog، وأضف السطور التالية: 

شغل python2.6 manage.py syncdb مرةً أخرى لتضيف الجداول من جزء المدير, و أعد تشغيل الخادم. 

إذا زرت 127.0.0.1:8000/admin الأن في متصفحك، يجب أن ترى صفحة تسجيل دخول.  إستخدم التفاصيل التي اخترت سابقاً عندما شغلت syncdb لأول مرة لتسجيل الدخول. يجب أن ترى جزء، إسمه Blog، بعنوان ثانوي لجدول posts. يمكنك أن تستخدم هذا لتنشئ، تعدل وتحذف التدوينات بواجهة بسيطة. 

هذا كل ما يجب فعله. لقد انشأت للتو مدونة كاملة الوظائف، رغم أنها بسيطة. لإنهاء هذا الدرس، سنلقي نظرة على تثبيث دجانجو على خادم ويب.


تثبيث دجانجو على خادم ويب

هناك نوعان من استضافات الويب، وأي واحد لديك سيؤثر على ما إذا كان بامكانك  أن تستخدم دجانجو. إذا كانت لديك استضافة مشتركة، فأنت بالكامل  تحت رحمة مضيفك. 

لا يدعم العديد من مضيفي الويب رخيصي السعر بايثون. بينما تكون PHP مضمونة تقريباً، فإن دعم لغات أخرى ليس غالباً كذلك.  سيتوجب عليك التحق من لوحة التحكم لتحديد إن كانت بايثون (ودجانجو) متوفرة.  جلياً فإن المنهجية مختلفة قليلاً بالنسبة لكل مضيف.  تشتغل كل الاستضافات تقريباً على Apache، ويمكننا أن نستخدمها لاستضافة دجانجو، باستخدام وحدات Apache mod_wsgi أو mod_python .

يشغل معضم مضيفي الويب البرامج النصية بلغة متعددة باستخدام CGI. يمكن لدجانجو أن يشتغل على FastCGI، وأيضاً، نظرياً، على CGI، لكن هذا ليس مدعوماً بشكلٍ رسمي وسيكون بطيئاً جداً بالنسبة لموقع إنتاج  فعلي.  ستحتاج أن تتحقق إذا كانت هذه مثبثة. عادةً ما تكون موجودة تحت العنوان، مثل “CGI and Scripting Language Support”.

إذا كانت لديك استضافة VPS، أو كنت محظوظاً كفايةً ليكون لديك خادم مخصص، فإن حياتك ستكون أكثر سهولة. عادةً تأتي هذه مع بايثون مثبت مسبقاً، ومن هنالك، أنت تحتاج فقط أن تتبع نفس الخطوات التي مررنا عبرها للحصول على نسخة محلية من دجانجو قيد التشغيل.  إذا كنت لا تتوفر على بايثون، يمكنك تثبيثه باستخدام مدير رزم. قد يأتي نظامك مع دجانجو.

بمجرد أن تثبث دجانجو على خادمك، إرفع الموقع الذي انشأت للتو باستخدام أي عميل نقل ملفات. يمكنك أن تضع الملفات في أي مكان، لكن أبقهم خارج مجلد public، و إلا سيكون أي أحد قادراً  على رؤية رمز المصدر الخاص بموقعك.  استخدم /home لكل مشاريعي.

بعد ذلك، انشئ قاعدة بيانات MySQL، اسمها 'firstblog' على خادمك و شغل syncdb مرةً أخرى.  سيتوجب عليك أن تنشئ حساب مدير لوحات التحكم مرةً أخرى، لكن هذا شيء مرةٍ واحدةٍ.

إذا جربت وشغلت هذا، قد تستقبل خطأ، و ذلك لأن إعدادات الخادم مختلفة عن تلك التي على حاسوبك المحلي. قد تحتاج أن تغير كلمة مرور قاعدة البيانات داخل settings.py، لكن اعتماداً على تهيئة نظامك، قد تواجه أيضاً بعض المشاكل. جوجل هو صديقك في مثل هذه الحالات!

لتشغيل الخادم هذه المرة، الأمر مختلف قليلا. يجب عليك تحديد عنوان بروتوكول وبوابة لتتمكن من الولوج إلى الموقع على الاترنت.

إذا زرت موقعك على متصفح انترنت، على البوابة 8000، يجب أن ترى موقعك!


خاتمة

هذا كل شيء في هذا الدرس...وفي دوراتنا التعليمية. اتمنى أن تكون قد تعلمت العديد من المهارات المفيدة خلال هذه الدروس الخمسة السابقة، و أنك مستعد للذهاب و تعلم المزيد من بايثون في المستقبل.   إذا أعجبتك النظرة على دجانجو، وتود إكمال الزيادة في معارفك بالإطار، هذه بعد الدورات الإضافية حول الموضوع. 

كالعادة، أنا دائماً سعيد لمناقشة أي اسئلة حول هذه الدورة التعليمية أو بايثون عموماً في التعليقات.  شكراً للقراءة. 

Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.