دعونا نقول أنك قمت ببناء تطبيق بايثون يشتغل على جهازك المحلي، جميـــل !! ولكن كيف يمكنك جعل من هذا التطبيق يستخدم كخدمة أو API ؟ في الكثير من الأوقات يقوم المبرمجون ببناء تطبيقات عديدة تحتاج إلى أن تستخدم مع بعضها البعض حتى يكون التطبيق كاملا ، وهنا تكمن أهمية وجود سيرفر ويب مثل جانغو حيث يمكنه إستضافة تطبيقك والتعامل مع جميع الطلبات الواردة .
ولكن يبدو أن بناء سيرفر ويب كامل يبدو شيء مبالغ فيه خصوصا إذا كنت تتعامل مع تطبيقات بسيطة والتي تحتاج إلى بضع وظائف لا غير ، وهنا يبرز دور فلاسك، ويعتبر هذا الأخير إيطار صغير من إيطارات بايثون والذي يمكن إستخدامه لبناء سيرفر ويب وبناء تطبيق ويب ، إذا كيف يمكننا فعل ذلك ؟ وكيف يمكننا بناء سيرفر ويب يمكنه التعامل مع مختلف الطلبات الواردة إليه ؟
تثبيت فلاسك (Flask)
واحدة من بين أفضل ما في فلاسك هو أنه بسيط جدا وسهل للإستخدام ، فإذا كنت مطور وتحتاج إلى API خاص بتطبيقك ، ففلاسك هو الحل وحتى إن كان لا يحتوي على مميزات كثيرة مثل تلك الموجودة في جانغو إلا أنه يمكن ان يحل مجموعة من المشاكل التي نصادفها في عالم بناء تطبيقات الويب .
قبل أن نبدأ تأكد من وجود أداةتثبيت حزم البرمجيات pipمثبتة مسبقا على نظامك والتي سبق لنا وأن قمنا بشرح طريقة تثبيتها إلا أنه لا يوجد مانع من إعادة ذكرها هنا على السريع .
$ sudo apt-get install python-pip
الأن نحن مستعدون لتثبيت فلاسك، قم بتشغيل الأمر التالي على الطرفية :
$ pip install flask
وينبغي ان تشاهد رسالة نجاح التثبيت في الأخير
كيف تقوم بإستخدامه ؟
دعونا نقوم بإنشاء تطبيق بسيط حتى نفهم كيف يعمل فلاسك ، قم بفتح ملف بايثون جديد تحت أي إسم و أضف السطور التالية :
from flask import Flask app = Flask(__name__) @app.route('/') def display(): return " it's works!" if __name__=='__main__': app.run()
قم بحفظ الملف و أكتب الأمر التالي على الطرفية :
$ python myflaskapp.py
إفتح إي متصفح وأكتب العنوان التالي : http://127.0.0.1:5000/ وستجد عبارة “it”s works!” إذن ها قد قمنا ببناء سيرفر ويب بسيط يخدم نص ثابت .
عندما نقوم بإستخدام فلاسك فإنه من الجيد أن نقوم بتشغيل التطبيق تحت وضع تصحيح الإخطاء ، كما يمكننا أيضا التحكم برقم المنفذ ، قم بهاته التغييرات على ملف بايثون :
app.run(debug=True, port=3134)
قم بتشغيل الكود من جديد ثم توجه إلى العنوان http://127.0.0.1:3134/ لترى النتيجة ، وإذا كنت تريد الوصول إلى التطبيق من جهة خارجية بإستخدام IP فعليك إخبار فلاسك بإعدادات المضيف المحدد ، قم بهذه التغييرات
app.run(host='192.168.1.105', debug=True, port=3134)
قم بتشغيل الأمر من جديد (مع تغيير IP الخاص بك) لترى سيرفر الخارجي يعمل .
كيف تقوم بتحديد المسارات في الروابط ؟
دعونا نقول أن تريد من السيرفر ان يقوم بأداء أشياء مختلفة إستنادا على المسارات المحددة على شريط العناوين ، على سبيل المثال إذا كان العنوان التالي : http://localhost:5000/alpha, يعرض رقم نسخة Alpha والعنوان :http://localhost:5000/beta يعرض رقم نسخة Beta ولعمل هذا قم بإنشاء ملف بايثون جديد وأضف إليه السطور التالية :
from flask import Flask from flask import Flask app = Flask(__name__) @app.route('/alpha') def alpha(): return "This is the alpha version" @app.route('/beta') def beta(): return "This is the beta version" if __name__=='__main__': app.run(debug=True)
قم بتشغيل الكود من جديد وتأكد من تغييرك للمسار مع وجود رقم النسخة المناسبة
كيف يمكن عرض صفحات HTML ؟
طبعا يمكننا إنشاء مجلد جديد نقوم بتسميته templates ونقوم بإنشاء ملف داخله تحت أي إسم تريد ، فقط حافظ على بينة هذا المجلد لأن فلاسك يقوم بالبحث عن صفحات HTML داخل هذا المجلد (templates) والموجود أصلا داخل مجلد التطبيق ، قم بإضافة السطور الموالية إلى ملف HTML :
<!DOCTYPE html> <html lang="ar" > <head> <title>عنوان</title> </head> <body> <p>فلاسك يمكنه عرص صفحات اش تي امل</p> </body> </html>
الأن قم بإنشاء ملف بايثون جديد وأضف إليه السطور التالية :
from flask import Flask, render_template app = Flask(__name__) @app.route('/') def render(): return render_template('fr.html') if __name__=='__main__': app.run(debug=True)
قم بتشغيل الكود ثم توجه إلى الرابط التالي http://localhost:5000 لترى صفحة HTML الخاصة بك
كيف تستولي على إعدادات الرابط ؟
عندما تقوم بتصميم API قد ترغب في الحصول على إعدادت المدخلات من شريط العنوان ، على سبيل المثال : يمكن أن يكون إسم مستخدم، إسم ملف أو علامات تحدد عمل ما ، قم بإنشاء ملف بايثون جديد وأكتب السطور التالية :
from flask import Flask, render_template, request app = Flask(__name__) @app.route('/input') def render(): if 'filename' in request.args: myfilename = request.args.get('fr') return render_template(myfilename) else: return "No input file specified" if __name__=='__main__': app.run(debug=True)
قمنا بتغيير تطبيقنا حيث يمكننا الأن تحديد إسم ملف HTML في الرابط بدلا من الترميز الصعب في ملف بايثون ، قم بتشغيل الكود ثم توجه إلى العنوان التالي: http://localhost:5000/input?filename=fr.html”
وستجد ان صفحة HTML تم عرضها من أخطاء ، حيث قمنا بإضافة شرطي IF و ELSE حتى نضمن في حالة عدم وجود صحفة HTML المقدمة فيظهر خطأ من طرفنا مفهوم للمستخدم بدلا من أخطاء فلاسك التقنية و التي لا يفهمها المستخدم العادي .