برمجة الويب بالبايثون – Brython كبديل لـ Javascript

برمجة الويب بالبايثون، أحد المجالات التي تدعمها البايثون بقوة. عند بناء تطبیقات الویب، تتوفر عدة أطر قویة بالبايثون مثل Flask و Django و Pyramid. تتركز قوة الأطر السابقة بسهولة استخدام بایثون في برمجة الجانب الخاص بالخادم Back-End، ولكن لابد من تعلم لغات اخرى لبناء الجانب الخاص بالمستخدم Front-End، وهي Html, CSS, JavaScript.

أهلا بكم في هذا المقال الجديد من بايثونات والذي نتاول فيه موضوع جديد ومميز يخص مطوري الويب، وخاصة الذين سئموا من JavaScript.

برمجة الويب بالبايثون – أدوات برمجة الويب

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

تعد لغة JavaScript  لغة واسعة الانتشار td جمیع المجالات وخصوصا الویب ولا غنى عنها أبدا بإنشاء الصفحات الدینامیكیة ولكنها لیست في نظرنا الخاص بسهولة بایثون، كما أنه یتوجب على مبرمجي البایثون قضاء وقت إضافي لتعلمها وتجربتها.

ماذا لو كان بالإمكان استخدام بایثون في المتصفح داخل ملفات Html ؟ ماذا لو كان بإمكان مطوري تطبیقات Django مثلا أن یستخدموا بایثون بدلا من JavaScript ؟ سیكون الوضع أجمل بكثیر ألیس كذلك ؟ الجواب هو برایثون Brython.

برمجة الويب بالبايثون – إطار Brython

Brython هي إطار خفیف، سهل ومفتوح المصدر لبناء جانب المستخدم Fron-End بحیث تحل محل جافا سكریبت ووظائفها بشكل ممتاز على الرغم من صغر حجمها وصغر المجتمع الداعم لها. تعد Brython جدیدة على الساحة ویعتبرها البعض إنها قد تكون أداة لا بأس بها لبرمجة صفحات الویب عوضا عن JavaScript .

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

فهیا بنا لنستكشفها ونبدأ ببرمجة صفحات الویب ببایثون – Brython.

برمجة الويب بالبايثون – الجانب العملي في Brython

للحصول على ملفات البدء وتوثیقات وشروحات Brython یمكننا أن نجدها في موقعها الرسمي: https://brython.info/index.htm

 برمجة الويب بالبايثون - إطار Brython

لنقم الآن بالتحري عن عناصر الصفحة والكود المكتوبة بة لنرى ماذا نجد!

لنقم بالضغط بالزر الأیمن للفأرة والمؤشر على الساعة الموجودة أمامنا في الصفحة الرئیسیة للموقع و نختار inspect:

عمل inspect في المتصفح  ثم اضغط على sources كما في الصورة:

 برمجة الويب بالبايثون - عمل inspect  في المتصفح ـ

إنه كود بایثون في صفحة Html مباشرة . ألیس هذا جمیلا ؟ طبعا و بشدة.

والآن لنقم ببعض التجهیزات البسیطة والتي ستساعدنا في كتابة صفحات ویب كأمثلة نستعرض بها Brython بشكل عملي.

سنستخدم هنا محرر نصوص VS Code المجاني من مایكروسوفت والذي یمكننا أن نجده في موقعه الرسمي : /https://code.visualstudio.com ونقوم بتثبیت بعض الإضافات علیه كما في الصور التالیة:

تهيئة أداة VS Code

نُثبت Brython من خلال pip:

Pip3 install brython

الآن أصبحنا جاهزین للعمل.

لنقم الآن بإنشاء مجلد خاص بالمشروع و ننشئ صفحة Html ولنسمیها index.html.
تفعيل Html في VS Code  برمجة الويب بالبايثون - اضافة شيفرة Html في المشروع

اضافة Brython في Html

الآن یمكننا تثبیت Brython بطریقتین، إما عن طریق تحمیل ملفاتها مباشرة في ملف مصغوط من هنا:
https://github.com/brython-dev/brython/releases/download/3.9.0/Brython-3.9.0.zip

ثم  نفك الضغط وندرج ملفي brython.js و brython_stdlib.js بنفس مكان صفحة الویب وهي index.html.

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

لفعل ذلك إذًا. نتجة إلى هنا: https://cdnjs.com/libraries/brython ونختار الملفین المشار لهما أعلاه مع ترویسات script كما بالصورة التالیة:

اضافة brython من خلال cdn

ثم نلصقها الواحدة تلو الأخرى في index.html داخل وسم head كما في الشكل:

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>

   <script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.9.0/brython.min.js" integrity="sha512-6xoV9qvQHPMnIFWzWrRwuq25qpgJ8FiGKekJ+7Bstb8/4XRC98k2c49IpdUVc5QitMNHKWPcFjFUkDxdIjJ7Nw==" crossorigin="anonymous"></script>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.9.0/brython_stdlib.min.js" integrity="sha512-QbMgbJbXnZv0V/+jpdd68nkyOrYwP/UsJAH/TGQmVHgwwrxI7QNKzRn3dKuG3kG/lVWHx5hYXBISk7zX86TInw==" crossorigin="anonymous"></script>
</head>
<body>
</body>
</html>

نضيف في ترويسة <body> الأولى دالة onload والتي سنجعلها تشير إلى دالة ()brython عند البدء بتحميل الصفحة من قبل المتصفح:

<body onload="brython()">
  
</body>

و من ثم نضيف ترويسة سكريبت ونعين فيه نص لغة البرمجة التي نريد برمجة الصفحة بها وهي بايثون كما في المكان والشكل التالي:

<body onload="brython()">
   <script type="text/python">
  
   </script>
</body>

والآن لنقم بكتابة اسطر Brython بين ترويسات <script> ليكون شكل البرنامج كما يلي:

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>

   <script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.9.0/brython.min.js" integrity="sha512-6xoV9qvQHPMnIFWzWrRwuq25qpgJ8FiGKekJ+7Bstb8/4XRC98k2c49IpdUVc5QitMNHKWPcFjFUkDxdIjJ7Nw==" crossorigin="anonymous"></script>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.9.0/brython_stdlib.min.js" integrity="sha512-QbMgbJbXnZv0V/+jpdd68nkyOrYwP/UsJAH/TGQmVHgwwrxI7QNKzRn3dKuG3kG/lVWHx5hYXBISk7zX86TInw==" crossorigin="anonymous"></script>
</head>
<body onload="brython()">
   <script type="text/python">
   from browser import document
   document <= "Hello Pythonat"

   </script>
</body>
</html>

لنشرح ما قمنا به هنا:

from browser import document

قمنا باستيراد دالة document من مكتبة browser والتي من خلالها سنتمكن من عرض نصوص في شاشة المتصفح:

 document <= "Hello Pythonat"

و من ثم، قمنا بتغذية الدالة document بالنص “Hello Pythonat” عن طريق => علي الرغم من من أننا سنكتب أكواد بايثون إلا ان عدد من الدوال تم تصميمها بشكل شبيه إلى حد ما لطريقة كتابة الشيفرة البرمجية بـ JavaScript.

نقوم بتفعيل إضافة live server من داخل برنامج vscode لتشغيل خادم خفيف، حتى نستعرض النتائج على المتصفح:

برمجة الويب بالبايثون - تفعيل command palette في vscode

كتابة الاوامر في vs code اضهار نص في الصفحة من خلال brython

رائع …

إظهار Alert باستخدام Brython

لنقم بعمل شيء آخر، لنعدل على البرنامج كما يلي:

<body onload="brython()">
   <script type="text/python">
   from browser import document,alert
   document <= "Hello Pythonat"

   alert("مرحبا بك في بايثونات")

   </script>
</body>

قمنا باستيراد دالة alert والتي ستقوم بدورها بإظهار تنبيه فيه أي رسالة نختارها للمستخدم:

برمجة الويب بالبايثون - إظهار Alert  من خلال brython

تعديل عناصر الصفحة

والآن لنقم ببناء دالة بايثون تقوم بالتعديل على احد عناصر الصفحة.  لننشيء صفحة Html جديدة ولنكتب الكود التالي:

<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <title>Document</title>

   <script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.9.0/brython.min.js" integrity="sha512-6xoV9qvQHPMnIFWzWrRwuq25qpgJ8FiGKekJ+7Bstb8/4XRC98k2c49IpdUVc5QitMNHKWPcFjFUkDxdIjJ7Nw==" crossorigin="anonymous"></script>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/brython/3.9.0/brython_stdlib.min.js" integrity="sha512-QbMgbJbXnZv0V/+jpdd68nkyOrYwP/UsJAH/TGQmVHgwwrxI7QNKzRn3dKuG3kG/lVWHx5hYXBISk7zX86TInw==" crossorigin="anonymous"></script>
</head>
<body onload="brython()">

<h1 id="ONE"></h1>
<button id="bt1">BUTTON</button>
   <script type="text/python">
   from browser import document,alert

   def modify(e):
       document["ONE"] <= "you clicked me"

   document["bt1"].bind("click",modify)
   </script>
</body>
</html>

نلاحظ أننا قمنا بكتابة رز ترويسة button واعطيناها “id =”bt1.  قمنا بكتابة دالة modify والتي هي عبارة عن دالة بايثون، وبداخلها تمكنا للوصول للـ id الذي هو ONE، و وظيفتة هذه الدالة هي إضافة النص you clicked me داخل ترويسة h1 كلما تم استدعاؤها.

document["bt1"].bind("click",modify)

في السطر أعلاه،  امكننا تغذية id  بـ document والتي من خلال استدعاء دالة الربط bind بالحدث “النقر” “click” بحيث يقوم بتشغيل و استدعاء الدالة modify، أي اننا كلما ضغطنا على الزر سنضيف  النص الموجود بالداله في ترويسة h1:

التعديل على عناصر الصفحة ـ برمجة الويب بالبايثون -

def modify(e):
       document["ONE"] <= "you clicked me"

لاحظ المعامل e  وهو عبارة عن الحدث event  والذي في مثالنا يساوي click. يمكننا أن نعرف المزيد عن هذا الكائن بطباعة ما يحتويه كما يلي بعد استدعاء مكتبة console واستخدام الدالة log لتطبع لنا محتويات الحدث e في تبويبة console في المتصفح:

<script type="text/python">
   from browser import document,alert، console

   def modify(e):
       document["ONE"] <= "you clicked me"
       console.log(e)

   document["bt1"].bind("click",modify)
   </script>

برمجة الويب بالبايثون - التعديل على عناصر الصفحة من خلال زر

جميل جدا، والآن قم بتعديل البرنامج ليكون كما يلي :

<h1 id="ONE"></h1>

<input type="text" id="text-input" placeholder="type anything">
<h3 id="THREE"></h3>

<button id="bt1">BUTTON</button>

<!-- first snippet -->
   <script type="text/python">
   from browser import document,alert,console

   def modify(e):
       document["ONE"] <= "you clicked me"
       console.log(e)
    

   document["bt1"].bind("click",modify)
   </script>
  
   <!-- second snippet -->
   <script type="text/python" id="prog2">
       from browser import document

       def text_out(e):
           document["THREE"].textContent = e.target.value


       document["text-input"].bind("input",text_out)
       </script>

في الدالة text_out قام الكائن document بالوصول للـ id الذي قيمته THREE و بدورنا استدعينا دالة textContent لتحول ما يتم تغذيتها به إلى نص صرف لتعرضه في الترويسة THREE.نلاحظ أيضا أن من خلال الحدث “e”  توصلنا للقيم التي يتم إدخالها من قبل المستخدم في الترويسة input من خلال ما تحتويه فيه e.target.value:

برمجة الويب بالبايثون - التعديل على مكونات الصفحة

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

و ما هذه إلا البداية.

One comment

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *