Skip to content

1. مقدمة

ملف PDF الخاص بهذا المستند متاح |HERE|.

الأمثلة الواردة في هذا المستند متاحة |HERE|.

يقدم هذا المستند قائمة ببرامج Python النصية في مجالات مختلفة:

  • أساسيات اللغة؛
  • إدارة قواعد البيانات MySQL و PostgreSQL؛
  • برمجة الشبكات TCP/ IP (بروتوكولات HTTP، POP3، IMAP، SMTP
  • برمجة الويب MVC باستخدام إطار العمل FLASK؛
  • البنى ثلاثية الطبقات والبرمجة عبر الواجهات؛

هذه ليست دورة شاملة في لغة Python، بل هي مجموعة من الأمثلة الموجهة للمطورين الذين سبق لهم استخدام لغة برمجة نصية مثل Perl أو PHP، أو VBScript، أو المطورين المعتادين على اللغات المحددة الأنواع مثل Java أو C# والذين قد يكونون مهتمين باكتشاف لغة برمجة نصية موجهة للكائنات. هذا المستند غير مناسب للقراء الذين لم يسبق لهم البرمجة أو الذين لديهم خبرة محدودة في هذا المجال.

كما أن هذا المستند ليس مجموعة من «الممارسات الجيدة». وقد يجد المطور المتمرس أن بعض الأكواد يمكن كتابتها بشكل أفضل. الهدف الوحيد من هذا المستند هو تقديم أمثلة لمن يرغب في التعرف على لغة Python 3 وإطار العمل Flask. ويمكنه بعد ذلك تعميق معرفته من خلال مستندات أخرى.

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

الأمثلة الواردة في هذا المستند متاحة على الرابط |HERE|:

Image

هذه الوثيقة هي تحديث لوثيقة سابقة صدرت في يونيو 2011 |https://tahe.developpez.com/tutoriels-cours/python/|. وقد تم إنشاء وثيقة عام 2011 باستخدام مترجم Python 2.7. ومنذ ذلك الحين، ظهرت إصدارات Python 3.x. في فبراير 2020، وصلنا إلى الإصدار 3.8. وقد تسببت إصدارات 3.x في انقطاع في قابلية التوافق بين الإصدارات: فقد يتبين أن الأكواد التي تعمل في Python 2.7 غير قابلة للاستخدام في Python 3.x. وينطبق هذا بشكل خاص على الكتابة في وحدة التحكم. في الإصدار 2.7، يمكن كتابة [print "toto"]، بينما في الإصدار 3.x يجب كتابة [print("toto")]: يجب إضافة أقواس. هذا التغيير البسيط يجعل معظم الأكواد المرفقة مع الوثيقة الصادرة عام 2011 غير قابلة للاستخدام مباشرةً مع Python 3.x. لذا يجب تعديلها.

لا يقتصر هذا المستند الجديد على تحديث أكواد عام 2011 لتصبح قابلة للتنفيذ مع Python 3.8 فحسب:

  • فقد شهدت الأقسام المتعلقة بالبرمجة TCP-IP واستخدام قواعد البيانات تطورات مهمة؛
  • أما القسم الخاص ببرمجة الويب، الذي كان مجرد مقدمة، فقد أصبح الآن دورة تدريبية كاملة تستخدم إطار العمل FLASK؛

لإنشاء هذه الدورة التدريبية، اتبعت نهجًا غير معتاد: قمت بتحويل الدورة التدريبية PHP [Introduction au langage PHP7 par lexemple]. لذا لم أتبع الهياكل التقليدية لدورات Python أو Flask. كنت أرغب قبل كل شيء في معرفة كيف يمكنني القيام في Python 3 بما قمت به في PHP 7. وكانت النتيجة أنني تمكنت من إعادة إنشاء جميع أمثلة الدورة التدريبية PHP 7 باستخدام Python 3 / Flask.

قد يحتوي هذا المستند على أخطاء أو نواقص. يمكن للقارئ استخدام سلسلة المناقشة |forum| للإبلاغ عنها.

محتوى الوثيقة كما يلي:

الفصل
مجلد الكود
المحتوى
   
 
مقدمة عن المقرر
 
تثبيت بيئة العمل
[bases]
أساسيات لغة Python – هياكل اللغة – أنواع البيانات – الدوال – عرض وحدة التحكم – سلاسل التنسيق – تغيير الأنواع – القوائم – القواميس – التعبيرات النمطية
[strings]
كتابة سلاسل الأحرف – طرق فئة <str> – ترميز/فك ترميز سلاسل الأحرف في UTF-8
[exceptions]
معالجة الاستثناءات
[fonctions]
نطاق المتغيرات – طريقة تمرير المعلمات – استخدام الوحدات النمطية – مسار Python – المعلمات المسماة – الدوال التكرارية
[fichiers]
قراءة/كتابة ملف نصي – إدارة الملفات المشفرة بـ UTF-8 – إدارة الملفات بـ jSON
[impots/v01]
الإصدار 1 من تمرين التطبيق، وهو حساب ضريبة الدخل. يتوفر التطبيق في 18 إصدارًا – ويُنفذ الإصدار 1 حلاً إجرائيًا
[imports]
إدارة تبعيات التطبيق عن طريق استيراد الوحدات النمطية – يتم عرض طريقة لإدارة التبعيات – تُستخدم هذه الطريقة في جميع أجزاء الوثيقة – إدارة مسار Python
[impots/v02]
تستند النسخة 2 من التطبيق إلى النسخة 1 من خلال تجميع جميع ثوابت التكوين في ملف تكوين يدير أيضًا مسار Python (Python Path)
[impots/v03]
تستند النسخة 3 من التطبيق إلى النسخة 2 باستخدام دوال مغلفة في وحدة نمطية – تتم إدارة التبعيات عن طريق التكوين – إدخال ملف jSON لقراءة البيانات اللازمة لحساب الضريبة وكتابة نتائج الحسابات
[classes/01]
الفئات – التوريث – الطرق والخصائص – getter / setter – المنشئ – الخاصية [__dict__]
[classes/02]
عرض للفئتين [BaseEntity] و [MyException] المستخدمتين في بقية الوثيقة – [BaseEntity] تسهل عمليات التحويل بين الكائنات والقواميس
[troiscouches]
الهندسة الطبقية والبرمجة عبر الواجهات. يعرض هذا الفصل أساليب البرمجة المستخدمة في بقية الوثيقة
[impots/v04]
الإصدار 4 من التطبيق – ينفذ هذا الإصدار حلاً يعتمد على بنية الطبقات، والبرمجة عبر الواجهات، واستخدام الفئات المشتقة من [BaseEntity] و [MyException]
[databases/mysql]
تثبيت SGBD MySQL – الاتصال بقاعدة البيانات – إنشاء جدول – تنفيذ الأوامر SQL SELECT، UPDATE، DELETE، INSERT – المعاملة – الاستعلامات المحددة المعلمات SQL
[databases/postgresql]
تثبيت SGBD PostgreSQL – الاتصال بقاعدة البيانات – إنشاء جدول – تنفيذ الأوامر SQL SELECT، UPDATE، DELETE، INSERT – المعاملة – الاستعلامات المحددة المعلمات SQL
[databases/anysgbd]
كتابة كود مستقل عن SGBD
[databases/sqlalchemy]
ORM (أداة التعيين العلائقي للكائنات) SqlAlchemy – يتيح ORM العمل بشكل موحد مع مختلف SGBD - فئات التعيين / الجداول – عمليات على فئات الصور الخاصة بالجداول
[impots/v05]
الإصدار 5 من تطبيق حساب الضريبة – استخدام بنية الطبقات الخاصة بالإصدار 04 وORM وSqlAlchemy للعمل مع SGBD وMySQL وPostgreSQL
[inet]
برمجة الإنترنت – بروتوكول TCP / IP (بروتوكول التحكم في النقل / بروتوكول الإنترنت) – بروتوكولات HTTP (بروتوكول النقل HyperText) – SMTP (بروتوكول نقل البريد البسيط) – POP (بروتوكول مكتب البريد) – IMAP (بروتوكول الوصول إلى رسائل الإنترنت)
[flask]
خدمات الويب باستخدام إطار عمل Flask – عرض صفحة HTML – خدمة ويب jSON – الاستعلامات GET و POST – إدارة جلسة الويب
[impots/http-servers/01]
[impots/http-clients/01]
الإصدار 6 من التمرين التطبيقي - إنشاء خدمة ويب jSON لحساب الضريبة باستخدام بنية متعددة الطبقات - كتابة عميل ويب لهذا الخادم باستخدام بنية متعددة الطبقات – برمجة العميل/الخادم – استخدام الوحدة النمطية [requests]
[impots/http-servers/02]
[impots/http-clients/02]
الإصدار 7 من تمرين التطبيق – تم تحسين الإصدار 6: العميل والخادم متعددا الخيوط – أدوات مساعدة [Logger] لتسجيل التبادلات بين العميل والخادم – [SendMail] لإرسال بريد إلكتروني إلى مسؤول التطبيق
[impots/http-servers/03]
[impots/http-clients/03]
الإصدار 8 من تمرين التطبيق – تم تحسين الإصدار 7 باستخدام جلسة عمل ويب
[xml]
إدارة لغة الترميز XML (eXtended) باستخدام الوحدة النمطية [xmltodict]
[impots/http-servers/04]
[impots/http-clients/04]
الإصدار 9 من التمرين التطبيقي – تم تعديل الإصدار 8 ليشمل التبادلات بين العميل والخادم بلغة XML؛
[impots/http-servers/05]
[impots/http-clients/05]
الإصدار 10 من التمرين التطبيقي – بدلاً من معالجة N دافع ضرائب عبر N طلبات GET، يتم استخدام طلب واحد POST مع إدراج N دافع ضرائب في نص الطلب POST
[impots/http-servers/06]
[impots/http-clients/06]
الإصدار 11 من التمرين التطبيقي – تم تعديل بنية العميل/الخادم للتطبيق: انتقلت الطبقة [métier] من الخادم إلى العميل
[impots/http-servers/07]
الإصدار 12 من التمرين التطبيقي – ينفذ هذا الإصدار خادم MVC (Model – View – وحدة التحكم) يقدم، بناءً على طلب العميل، jSON أو XML أو HTML دون تمييز. يُنفذ هذا الفصل الإصدارين jSON وXML من الخادم
[impots/http-clients/07]
تنفيذ عملاء jSON و XML لخادم MVC من الإصدار 12
[impots/http-servers/07]
تنفيذ الخادم HTML من الإصدار 12 – استخدام إطار العمل CSS Bootstrap
[impots/http-servers/08]
الإصدار 13 من التمرين التطبيقي - إعادة هيكلة كود الإصدار 12 – إدارة الجلسة باستخدام الوحدة النمطية [flask_session] وخادم Redis – استخدام كلمات مرور مشفرة
[impots/http-servers/09]
[impots/http-clients/09]
الإصدار 14 من التمرين التطبيقي – تنفيذ URL باستخدام رمز CSRF (تزوير الطلبات عبر المواقع)
[impots/http-servers/10]
الإصدار 15 من التمرين التطبيقي – إعادة هيكلة كود الإصدار 14 لإدارة نوعين من الإجراءات: ASV (إجراء عرض) التي تقتصر على عرض واجهة دون تغيير حالة الخادم، ADS (إجراء «Do Something») الذي يقوم بإجراء يغير حالة الخادم – تنتهي جميع هذه الإجراءات بإعادة توجيه إلى إجراء ASV – وهذا يسمح بإدارة عمليات تحديث الصفحة في متصفح العميل بشكل صحيح
[impots/http-servers/11]
الإصدار 16 من التطبيق – إدارة URL مع البادئة
[impots/http-servers/12]
الإصدار 17 من التطبيق – نقل الإصدار 16 إلى خادم Apache / Windows
[impots/http-servers/13]
الإصدار 18 من التطبيق – يصحح خطأً في الإصدار 17

الإصدار النهائي لمشروع التطبيق هو تطبيق عميل/خادم لحساب الضرائب بالبنية التالية:

Image

يتم تنفيذ الطبقة [web] المذكورة أعلاه باستخدام بنية MVC:

Image

محتوى الوثيقة مكثف. سيحصل القارئ الذي سيقرأها حتى النهاية على فهم جيد لبرمجة الويب MVC بلغة Python / Flask، بالإضافة إلى فهم جيد لبرمجة الويب MVC بلغات برمجة أخرى.

أما القارئ الذي يفضل الاطلاع على الكود واختباره وتعديله بدلاً من قراءة درس تعليمي، فيمكنه اتباع الخطوات التالية:

Image

يبدو ملف [README.md] كما يلي:

Image

من غير المرجح أن يقرأ القارئ الدورة التدريبية بالكامل:

  • قد يقرأ القارئ المبتدئ الفصول من 1 إلى 15 ويتوقف عند هذا الحد. ويمكنه بعد ذلك قضاء بعض الوقت في كتابة نصوص Python الخاصة به قبل العودة إلى هذا المقرر؛
  • أما القارئ الذي يمتلك أساسيات لغة Python ويرغب في التعرف على قواعد البيانات و ORM (Object Relational Mapper) [sqlalchemy فيمكنه الاكتفاء بالفصول من 16 إلى 20؛
  • أما القارئ الذي يرغب في التعرف على برمجة الويب (HTTP، SMTP، POP3، IMAP)، فيمكنه قراءة الفصل 21. هذا الفصل معقد إلى حد ما ويعرض نصوصًا برمجية متقدمة. يمكن قراءته على مستويين:
    • لاكتشاف بروتوكولات الإنترنت؛
    • للحصول على نصوص برمجية تستخدم هذه البروتوكولات؛
  • أما القارئ الذي يمتلك أساسيات لغة Python ويرغب في التعرف على برمجة الويب باستخدام إطار العمل Flask، فيمكنه قراءة الفصل 22؛
  • أما القارئ الذي يرغب في التعمق في برمجة الويب باستخدام إطار العمل Flask فيمكنه دراسة الفصول من 23 إلى 38. حيث يتم فيها بناء تطبيقات عميل/خادم متزايدة التعقيد بالإضافة إلى تطبيق HTML / Python وفقًا لنموذج التطوير MVC (النموذج – العرض – وحدة التحكم). يتم تطوير هذا التطبيق في الفصل 32. ويمكن التوقف عند هذا الحد، حيث أن الفصول التالية تتضمن تعديلات غير جوهرية؛

Serge Tahé، سبتمبر 2020