كيفية إنشاء تطبيق Python ونشره؟
بايثون هي لغة برمجة مجانية ومفتوحة المصدر لها العديد من التطبيقات. ابتكرها غيدو فان روسوم في عام 1991، ومنذ ذلك الحين تطورت لتصبح واحدة من أكثر لغات البرمجة شعبية.
في هذه المقالة، سنتحدث عن بايثون ومزاياها وعيوبها وحالات الاستخدام وخيارات النشر. علاوةً على ذلك، سنشرح كيفية إنشاء تطبيق بايثون بسيط وإرساءه ونشره على حاويات Back4app.
استمر في القراءة لمعرفة المزيد عن كيفية إنشاء مشروع بايثون ونشره.
Contents
نظرة عامة على بايثون
بايثون هي لغة برمجة عالية المستوى للأغراض العامة. وهي لغة مفسرة ومكتوبة ديناميكيًا ويمكن استخدامها للبرمجة النصية والبرمجة. وعادةً ما يصف المطورون لغة بايثون بأنها لغة “ذات بطاريات متضمنة” نظرًا لمكتبتها القياسية الواسعة.
ظهرت هذه اللغة لأول مرة في عام 1991 ومنذ ذلك الحين أصبحت واحدة من أكثر لغات البرمجة شعبية ومحبوبة بسبب تركيبها اللغوي البسيط والمقروء. تمت تغطية مبادئ التصميم الرئيسية للغة بايثون في كتاب “زن بايثون ” الذي كتبه تيم بيترز.
لدى Python مجتمع ضخم من المطورين والحزم الجاهزة للاستخدام. تُستخدم بايثون هذه الأيام في كل مكان تقريبًا – في إدارة الخوادم، والحوسبة العلمية، والتعلم الآلي، وبناء واجهات برمجة تطبيقات RESTful، وما إلى ذلك. يمكن اعتبار بايثون إحدى المهارات الأساسية للمطور الحديث.
مزايا بايثون
سهل الاستخدام
بايثون هي واحدة من أسهل اللغات استخدامًا وتعلمًا. منحنى التعلم فيها يكاد يكون معدومًا لأن فلسفة تصميمها الرئيسية تركز على البساطة وسهولة قراءة التعليمات البرمجية. كما أن بايثون مفضلة في التعليم لأنها أداة رائعة لتعلم مفاهيم البرمجة الأساسية.
التطور السريع
ميزة أخرى رائعة ل Python هي أنها تسمح بالتطوير السريع. إنها لغة رائعة لوضع النماذج الأولية وإنجاز العمل بسرعة. باستخدام Python، لا داعي للقلق بشأن بناء الجملة المعقدة وتخصيص الذاكرة وما إلى ذلك، وبدلاً من ذلك، يمكنك التركيز على تطبيقك.
متعدد الاستخدامات
بايثون هي واحدة من أكثر لغات البرمجة تنوعًا. تُستخدم في مجموعة واسعة من الصناعات والمجالات. تتضمن بعض المجالات التي تُستخدم فيها بايثون المحاسبة والبحث العلمي وعلوم البيانات وتطوير الويب وتطوير الألعاب والأتمتة.
محمول
بايثون هي لغة قابلة للنقل لأنها لغة مفسرة (مثل جافا) وليست مجمّعة (مثل C++C). هذا يعني أن الشيفرة المكتوبة على منصة واحدة يمكن نقلها بسهولة إلى منصة أخرى. وهذا يجعل بايثون خيارًا شائعًا للمطورين الذين يحتاجون إلى دعم منصات متعددة، بما في ذلك ويندوز وماك أو إس ولينكس وأندرويد.
مكتبات واسعة النطاق
لغة برمجة Python مدعومة بمجتمع ضخم من المطورين. هناك مكتبة لأي شيء يمكنك تخيله تقريبًا. تتضمن بعض المكتبات الأكثر شيوعًا ما يلي:
- تطوير الويب(Django، Flask، FastAPI)
- التعلم الآلي وعلوم البيانات(TensorFlow وPyTorch)
- الرؤية الحاسوبية(OpenCV، Pillow، Scikit-image)
- الحوسبة العلمية(NumPy, SciPy)
- واجهة المستخدم الرسومية(Qt، GTK)
وهذا بالكاد يخدش السطح. إذا كنت تريد الاطلاع على قائمة كاملة بحزم بايثون الرائعة ألقِ نظرة على رهيبة بايثون على GitHub.
مطبوع ديناميكيًا
بايثون هي لغة مكتوبة ديناميكيًا مما يعني أنك لست مضطرًا إلى التصريح بنوع البيانات عند إنشاء المتغيرات. يتم تعيين نوع المتغير فقط عند تنفيذ الشيفرة البرمجية.
بقدر ما هي رائعة، فإن اللغات المكتوبة ديناميكيًا قد تكون أحيانًا سلاحًا ذا حدين. فهي عادةً ما تكون أكثر عرضة للأخطاء ولديها مستوى أقل من التحكم في الذاكرة مقارنةً باللغات المكتوبة بشكل ثابت.
قابل للتوسيع
إذا كانت متطلبات مشروعك تتضمن مهام حوسبة ثقيلة يمكنك كتابتها بلغات أسرع مثل C أو C++C ثم استدعائها من شيفرة Python.
لمعرفة المزيد حول استدعاء C/C+++C من Python، راجع هذه المقالة الرائعة.
حدود بايثون
أداء سيء
بايثون بطيئة نسبيًا مقارنةً بلغات البرمجة الأخرى. والعاملان اللذان يعيقان أداءها أكثر من غيرهما هما كون بايثون لغة مفسرة ومطبوعة ديناميكيًا. إذا كانت متطلبات مشروعك تتضمن حوسبة ثقيلة أو متعددة الخيوط فقد لا تكون بايثون الأداة الأنسب. سيكون من الأفضل لك استخدام لغة C أو C++C أو لغة مجمعة أخرى.
الذاكرة المكثفة
عادةً ما تستهلك برامج بايثون مقارنةً بالبرامج المكتوبة باللغات ذات النمط الثابت ذاكرةً أكبر وتوفر مستوى أقل من التحكم في الذاكرة. قد يكون هذا مشكلة بعض الشيء إذا كانت تطبيقاتك تحتاج إلى أن تكون فعالة من حيث الذاكرة.
عرضة لأخطاء وقت التشغيل
كون بايثون لغة مفسرة فهي أكثر عرضة لأخطاء وقت التشغيل. نظرًا لعدم وجود عملية تجميع لا يمكن اكتشاف الأخطاء في وقت التحويل البرمجي. علاوةً على ذلك، فإن لغة بايثون مكتوبة ديناميكيًا مما يعني أنه يمكن للمطورين تغيير نوع المتغير في أي وقت. هذا يمكن أن يؤدي أحيانًا إلى أخطاء ويتطلب من المطورين أن يكونوا منتبهين لأنواع المتغيرات.
القفل العالمي للمترجم الفوري (GIL)
قفل المترجم العالمي (GIL) في بايثون هي آلية تضمن تنفيذ مؤشر ترابط واحد فقط لرمز بايثون البايتي كود في كل مرة. في حين أن هذا يبسط تنفيذ اللغة ويوفر بعض فوائد الأداء لأنواع معينة من البرامج، إلا أنه يحد أيضًا من القدرة على الاستفادة الكاملة من المعالجات متعددة النواة في التطبيقات المرتبطة بوحدة المعالجة المركزية.
غير محسّن للوصول إلى قاعدة البيانات
يمكن أن يكون العمل مع قواعد البيانات في تطبيقات بايثون أكثر صعوبة بسبب عدم وجود واجهات قوية وسهلة الاستخدام مثل اتصال قاعدة بيانات جافا (JDBC). بينما لا يزال من الممكن استخدام Python لعمليات قواعد البيانات التي تتضمن مهام بسيطة للقراءة والكتابة، إلا أنه قد لا يكون الخيار الأنسب للتطبيقات التي تحتاج إلى العمل مع قواعد بيانات كبيرة ومعقدة.
خيارات نشر بايثون
يمكن نشر تطبيقات بايثون على العديد من المنصات السحابية. بشكل عام، يمكننا تقسيمها إلى الفئات الثلاث التالية:
- البنية التحتية كخدمة (IaaS)
- المنصة كخدمة (PaaS)
- الحاويات كخدمة (CaaS)
IaaS هي الأقل تجريداً و CaaS هي الأكثر تجريداً. هناك أيضًا الاستضافة التقليدية، لكنني متأكد من أنك على دراية بذلك بالفعل.
البنية التحتية كخدمة (IaaS)
البنية التحتية كخدمة أو IaaS هو نموذج حوسبة سحابية يقدم فيه بائع من طرف ثالث موارد حوسبة افتراضية مثل الخوادم والتخزين وأنظمة التشغيل والشبكات عبر الإنترنت. يمكن بعد ذلك إدارة الموارد المقدمة عبر لوحات تحكم متقدمة أو واجهات برمجة تطبيقات عالية المستوى، مما يمنح العملاء تحكمًا كاملاً في بنيتهم التحتية بالكامل.
وتتمثل المزايا الرئيسية لخدمة IaaS في قابلية التوسع، وتوفير التكاليف، وزيادة الدعم، والأداء، والأمان. يعتمد هيكل الدفع الذي يعتمده معظم مقدمي خدمات IaaS على نظام الدفع حسب الاستخدام، حيث لا تتحمل رسومًا إلا مقابل الموارد التي تستخدمها.
IaaS هو نموذج الحوسبة السحابية الأكثر مرونة ويظل الخيار الأكثر شيوعًا منذ إطلاقه في أوائل عام 2010. الجانب السلبي الأكبر فيه هو أن العميل مسؤول مسؤولية كاملة عن تطبيقاته وأنظمة تشغيله وبياناته.
المنصة كخدمة (PaaS)
المنصة كخدمة (PaaS) هي خدمة حوسبة سحابية توفر للمستخدمين بيئة سحابية لإنشاء التطبيقات وإدارتها وتقديمها. تقدم PaaS أدوات مبنية مسبقًا لتطوير التطبيقات وتخصيصها واختبارها. مع المنصة كخدمة، يمكن للمستخدمين التركيز على تطبيقاتهم، حيث يعتني مزود الخدمة بالبنية التحتية الأساسية، بما في ذلك الخوادم وأنظمة التشغيل والبرامج والنسخ الاحتياطية وغيرها.
تشمل مزايا المنصة كخدمة سرعة الوصول إلى السوق، وزيادة الأمان، وفعالية التكلفة، وقابلية التوسع، والتوافر العالي، وتتطلب بشكل عام كودًا أقل. ومع ذلك، هناك بعض الجوانب السلبية. تتمثل الجوانب السلبية الثلاثة الرئيسية في الافتقار إلى المرونة، وانعدام التحكم، ومخاطر انغلاق البائع. ومع ذلك، لا تزال المنصة كخدمة تمكّن المستخدمين من إنشاء التطبيقات بسرعة أكبر وبنفقات إدارية أقل.
الحاويات كخدمة (CaaS)
الحاويات كخدمة (CaaS) هو نموذج حوسبة سحابية يسمح للمؤسسات بتحميل الحاويات وتشغيلها وتوسيع نطاقها وإدارتها من خلال استخدام تقنية المحاكاة الافتراضية للحاويات. يقوم بائعو CaaS بتجريد الكثير من الأعمال المطلوبة، مثل البنية التحتية وأنظمة التشغيل والبرامج ومحركات الحاويات وغيرها.
إن الشيء الرائع في الحاويات هو أنه بمجرد أن يصبح تطبيقك في حاوية يمكنك نشره في أي مكان تقريبًا ويضمن لك أن يتصرف بنفس الطريقة. إذا دعت الحاجة إلى ذلك، يمكنك الانتقال من بائع CaaS إلى آخر. عادةً ما تتم محاسبة عملاء CaaS لكل حاوية (بناءً على مواصفات الحاوية).
تعد الحوسبة السحابية كخدمة أكثر تكلفة بشكل عام مقارنةً بالبنية التحتية كخدمة والبنية التحتية كخدمة، وتوفر مستوى أقل من المرونة والتحكم، وتتطلب بعض الأعمال الأولية مثل تهيئة التطبيق في حاويات وما إلى ذلك. ومع ذلك، فهي واحدة من أسهل نماذج الحوسبة السحابية التي يمكن استخدامها بمجرد أن يتم تهيئة تطبيقك في حاوية.
لمعرفة المزيد عن الحاويات راجع ما هي الحاويات في الحوسبة السحابية؟
عملية نشر بايثون
سنشرح في هذا القسم من البرنامج التعليمي كيفية إنشاء تطبيق بايثون بسيط ونشره خطوة بخطوة. سيتم تنفيذ تطبيق الويب باستخدام إطار عمل Flask ونشره على حاويات Back4app.
المتطلبات الأساسية
- خبرة في بايثون وفلاسك
- الفهم الأساسي لـ Docker
- الإصدار 3.8 من Python أو أحدث وتثبيت Docker Desktop
ما هي حاويات Back4app Containers؟
Back4app Containers عبارة عن منصة مجانية ومفتوحة المصدر تمكّنك من نشر التطبيقات وتوسيع نطاقها باستخدام حاويات موزعة عالميًا.
مع Back4app Containers، يمكنك التركيز على بناء برنامجك وشحنه بسرعة، دون الحاجة إلى القلق بشأن DevOps.
تتكامل المنصة بإحكام مع GitHub وتأتي مزودة بنظام CI/CD مدمج. وباستخدام حاويات Back4app، ستتمكن من تشغيل تطبيقك على الإنترنت في غضون دقائق.
لماذا نستخدم حاويات Back4app Containers؟
- يتكامل بشكل جيد مع GitHub
- توسيع النطاق وعمليات النشر التي لا تستغرق وقتاً طويلاً
- سهل الاستخدام للغاية
- دعم عملاء ممتاز
مقدمة المشروع
في هذه المقالة، سننشئ وننشر واجهة برمجة تطبيقات RESTful API بسيطة ستكون بمثابة قائمة مهام منتهية. ستسمح واجهة برمجة التطبيقات على الويب للمستخدمين بإجراء عمليات CRUD الأساسية – مثل إضافة المهام، وحذف المهام، ووضع علامة على أنها منجزة، وما إلى ذلك.
سنعمل أولًا على الشيفرة المصدرية ثم ننشرها لاحقًا على حاوية Back4app Flask. سيتم تنفيذ تطبيق الويب باستخدام إطار عمل الويب Flask.
لا تتردد في تخطي قسم “تطبيق البرمجة” ومتابعة مشروع Python الخاص بك.
تطبيق الكود
المشروع الأولي
ابدأ بإنشاء دليل مخصص لتطبيق Flask والانتقال إليه:
$ mkdir flask-todo
$ cd flask-todo
إنشاء بيئة افتراضية وتفعيلها:
$ python3 -m venv venv && source venv/bin/activate
بعد ذلك، قم بتثبيت Flask عن طريق النقطة:
$ (venv) pip install Flask==2.2.2
للتأكد من أن كل شيء يعمل، دعنا نستبدل محتويات app.py بما يلي:
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index_view():
return {
'detail': 'Hello world'
}
يهيئ هذا الرمز Flask وينشئ نقطة نهاية بسيطة تُرجع رسالة.
ابدأ تشغيل الخادم باستخدام:
$ (venv) flask run
وأخيراً، انتقل إلى http://localhost:5000/ في متصفحك المفضل. يجب أن ترى رسالة تقول مرحباً أيها العالم
.
قاعدة البيانات
للمضي قدماً، دعنا نهتم بقاعدة البيانات.
بدلًا من تنفيذ SQL الخام، سنستخدم Flask-SQLAlchemy – وهو برنامج بسيط من Flask ORM. لتثبيته قم بتشغيله:
$ (venv) pip install Flask-SQLAlchemy
بعد ذلك، استبدل محتويات app.py بما يلي:
# app.py
from datetime import datetime
from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
app = Flask(__name__)
app.config['SECRET_KEY'] = '5b3ef5s80gl3b217c20fb37044fe4k33'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///default.db"
db.init_app(app)
class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(128), nullable=False)
description = db.Column(db.String(256), nullable=False)
is_done = db.Column(db.Boolean, default=False)
created_at = db.Column(db.DateTime, default=datetime.now(), nullable=True)
updated_at = db.Column(db.DateTime, default=None, nullable=True)
def as_dict(self):
return {c.name: getattr(self, c.name) for c in self.__table__.columns}
def __repr__(self):
return f'<Task {self.title}>'
@app.route('/')
def index_view():
return {
'name': 'flask-todo',
'description': 'a simple todo app written in flask',
'version': 1,
}
تهيئ هذه الشيفرة Flask وتعرّف نموذجًا جديدًا باسم مهمة
. يحتوي نموذج المهمة على اسم،
ووصف،
و is_done،
وبعض المتغيرات الأخرى مثل create_at
و updated_at
التي سنقوم بتحديثها ديناميكيًا.
بعد ذلك، قم بإنشاء نص برمجي Python باسم init_db.py يقوم بتهيئة وتعبئة قاعدة بيانات SQLite:
# init_db.py
from app import db, app
from app import Task
with app.app_context():
db.create_all()
if Task.query.count() == 0:
tasks = [
Task(name='Backup the database', description='Make sure to backup the database with all the tables.'),
Task(name='Setup 2FA', description='Setup the two factor authentication to secure your account.'),
Task(name='Malware scan', description='Perform a malware scan.'),
]
for task in tasks:
db.session.add(task)
db.session.commit()
قم بتشغيل البرنامج النصي من سطر الأوامر:
$ (venv) python init_db.py
ستلاحظ أنه تم إنشاء دليل جديد باسم المثيل. داخل هذا الدليل، سيكون هناك default.db وهو قاعدة البيانات الافتراضية .
واجهة برمجة التطبيقات
سيحتوي تطبيق Flask على عناوين URL التالية:
- يقوم
/api/
بإرجاع قائمة بجميع المهام /API/
/ يعرض أو يحذف مهمة معينة/وابي/إنشاء/إنشاء/إنشاء
مهمة جديدة/API/Toggle/
/ تبديل خاصيةis_done
لمهمة معينة
لتنفيذها ألحق ما يلي في نهاية app.py:
# app.py
@app.route('/api/')
def list_view():
json = [task.as_dict() for task in Task.query.all()]
return jsonify(json)
@app.route('/api/<int:task_id>/', methods=['GET', 'DELETE'])
def detail_view(task_id):
task = db.get_or_404(Task, task_id)
if request.method == 'DELETE':
db.session.delete(task)
db.session.commit()
return {
'detail': 'Task has been successfully deleted.'
}
else:
return task.as_dict()
@app.route('/api/create/', methods=['POST'])
def create_view():
name = request.form.get('name')
description = request.form.get('name')
if name is None or description is None:
return {
'detail': 'Please provide the name and the description.'
}, 400
task = Task(name=name, description=description)
db.session.add(task)
db.session.commit()
return task.as_dict()
@app.route('/api/toggle/<int:task_id>/')
def toggle_view(task_id):
task = db.get_or_404(Task, task_id)
if task.is_done:
task.is_done = False
else:
task.is_done = True
task.updated_at = datetime.now()
db.session.commit()
return task.as_dict()
هذا الرمز لا يحتاج إلى شرح. لقد حددنا المسارات المطلوبة ونفذنا المنطق المطلوب. في كل مرة نريد فيها إجراء تغييرات على قاعدة البيانات علينا الالتزام
بها ()
.
عظيم هذا كل شيء بالنسبة لتطبيق Flask. في الأقسام التالية، سنقوم بإعداد مشروعنا للنشر.
جونيكورن
لا يُنصح باستخدام خادم الويب الخاص بـ Flask في الإنتاج لأنه مصمم للتعامل مع طلب واحد في كل مرة وقد لا يكون قادرًا على التعامل مع كميات كبيرة من حركة المرور. بسبب ذلك دعنا نستبدله بـ Gunicorn – وهو خادم Python WSGI جاهز للإنتاج.
أولاً، قم بتثبيته عن طريق النقطة:
$ (venv) pip install gunicorn==20.1.0
بعد التثبيت الناجح يمكنك بدء تشغيل الخادم هكذا:
$ (venv) gunicorn -w 2 -b 0.0.0.0:5000 app:app
[INFO] Starting gunicorn 20.1.0
[INFO] Listening at: http://0.0.0.0:5000 (1)
[INFO] Using worker: sync
[INFO] Booting worker with pid: 3
[INFO] Booting worker with pid: 4
ضع في اعتبارك أن هذا الأمر يعمل فقط على أنظمة التشغيل المستندة إلى UNIX.
سيؤدي هذا إلى بدء تشغيل عاملين من Gunicorn وعرض تطبيقك على المنفذ 5000
. للوصول إلى تطبيقك افتح متصفح الويب المفضل لديك وانتقل إلى http://localhost:5000.
المتطلبات.txt
آخر شيء نحتاج إلى القيام به قبل إرساء تطبيقنا هو إنشاء ملف requirements.txt. يُستخدم ملف requirements.txt لتحديد تبعيات المشروع.
قم بتوليدها عن طريق تشغيل الأمر التالي:
$ (venv) pip freeze > requirements.txt
يمكن للآخرين (بما في ذلك حاويات Docker) بعد ذلك استخدام ملف requirements.txt على النحو التالي
$ (venv) pip install -r requirements.txt
تطبيق Dockerize
لإرساء التطبيق سنستخدم ملف Dockerfile. تُستخدم ملفات Dockerfiles لتحديد تعليمات بناء صور Docker. فهي تسمح لك بتعيين الصورة الأساسية، ودليل العمل، ومتغيرات البيئة، وتنفيذ الأوامر، والمزيد.
.dockerignore
قبل العمل على ملف Dockerfile، دعنا ننشئ ملف .d ockerignore . يُستخدم ملف .dockerignore لتحديد المجلدات والملفات التي يجب حذفها من الصورة.
.git/
.idea/
instance/
__pycache__/
تأكد من تعديل .dockerignore بناءً على احتياجاتك .
ملف إرساء
أنشئ ملفًا جديدًا في جذر المشروع باسم Dockerfile بالمحتويات التالية:
# syntax=docker/dockerfile:1.4
FROM --platform=$BUILDPLATFORM python:3.10-alpine
WORKDIR /app
# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# install the requirements
COPY requirements.txt /app
RUN --mount=type=cache,target=/root/.cache/pip \
pip3 install -r requirements.txt
COPY . .
# initialize the database (create DB, tables, populate)
RUN python init_db.py
EXPOSE 5000/tcp
CMD ["gunicorn", "-w", "2", "-b", "0.0.0.0:5000", "app:app"]
يستخدم ملف Dockerfile هذا ملف Dockerfile python:3.10-alpine
كصورة أساسية. ثم يقوم بتعيين دليل العمل، وتثبيت المتطلبات، ونسخ المشروع، وتهيئة قاعدة البيانات، وأخيرًا بدء تشغيل خادم Gunicorn على المنفذ 5000
.
لمعرفة المزيد عن ملفات Dockerfiles راجعمرجع Dockerfile .
الاختبار
للتأكد من أن ملف Dockerfile يعمل يمكننا بناءه وتشغيله محليًا. لبناء الصورة وتشغيلها:
$ docker build -t flask-todo:1.0 .
إذا قمت بإدراج الصور يجب أن ترى صورة جديدة:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
flask-todo 1.0 7ege66240eb1 3 hours ago 109MB
وأخيراً، استخدم الصورة لتجهيز حاوية Docker جديدة:
$ docker run -it -p 5000:5000 flask-todo:1.0
[2023-02-02 20:08:57 +0000] [1] [INFO] Starting gunicorn 20.1.0
[2023-02-02 20:08:57 +0000] [1] [INFO] Listening at: http://0.0.0.0:5000 (1)
[2023-02-02 20:08:57 +0000] [1] [INFO] Using worker: sync
[2023-02-02 20:08:57 +0000] [7] [INFO] Booting worker with pid: 3
[2023-02-02 20:08:57 +0000] [8] [INFO] Booting worker with pid: 4
يمكنك استخدام
-d
لبدء تشغيل حاوية Docker في الوضع المنفصل. وهذا يعني أن الحاوية تعمل في خلفية جهازك الطرفي ولا تتلقى مدخلات أو تعرض مخرجات.
رائع، تطبيقك يعمل الآن في حاوية. انتقل إلى http://localhost:5000 في متصفح الويب المفضل لديك لرؤية تطبيق الويب الخاص بك قيد التشغيل.
{
"name": "flask-todo",
"description": "a simple todo app written in flask",
"version": 1
}
الدفع إلى GitHub
ستتطلب الخطوات التالية أن يكون لديك حساب GitHub. إذا لم يكن لديك حساب بعد، فقم بالتسجيل وإلا فقم بتسجيل الدخول. بالإضافة إلى ذلك، تأكد من تثبيت Git وتهيئته.
بمجرد تسجيل الدخول إلى GitHub، استخدم زر “زائد” في أعلى يمين الشاشة لفتح القائمة المنسدلة. بعد ذلك، اختر “مستودع جديد”:
اختر اسمًا مخصصًا لمستودعك. سأختار “flask-todo”، ثم انقر على “إنشاء مستودع”:
بمجرد إنشاء المستودع الخاص بك قم بتدوين عنوان URL البعيد:
والآن، دعنا ننتقل إلى مشروعنا المحلي وندفع الشيفرة البرمجية.
نظرًا لأن لدينا بعض الملفات التي لا نريد دفعها إلى Git، قم بإنشاء ملف .gitignore في جذر المشروع. سأضيف إليه ما يلي، ولكن لا تتردد في تعديله وفقًا لاحتياجاتك:
instance/*
!instance/.gitignore
.webassets-cache
.env
__pycache__/
*.py[cod]
*$py.class
بعد ذلك، افتح سطر الأوامر وقم بتشغيل الأوامر التالية:
$ git init
$ git remote add origin <your_remote_url>
$ git add .
$ git commit -m "init"
$ git push origin master
سيؤدي هذا إلى تهيئة مستودع Git جديد، وإضافة الأصل البعيد، و VCS جميع الملفات، وإنشاء الالتزام الأولي. وأخيرًا، سيدفع الشيفرة المصدرية إلى مستودع GitHub.
عظيم، يجب أن يكون هذا كل شيء. إذا انتقلت الآن إلى مستودعك في المتصفح الخاص بك، يجب أن تكون قادرًا على رؤية أن جميع الملفات قد تم الالتزام بها.
نشر التطبيق
ستتطلب الخطوات التالية أن يكون لديك حساب Back4app. إذا كان لديك حساب بالفعل، فقم بتسجيل الدخول وإلا فقم بالتسجيل للحصول على حساب مجاني.
بمجرد تسجيل الدخول، ستتم إعادة توجيهك إلى لوحة تحكم تطبيقك. انقر على زر “إنشاء تطبيق جديد” لبدء عملية إنشاء التطبيق.
يتيح لك تطبيق Back4app إنشاء ونشر نوعين من التطبيقات، “الخلفية كخدمة” (BaaS) و”الحاويات كخدمة” (CaaS). بما أننا نريد نشر تطبيق مرساة سنختار “الحاويات كخدمة”.
بعد ذلك، تابع وربط GitHub بحساب Back4app الخاص بك. تأكد من منح أذونات Back4app للمستودع الذي أنشأناه في الخطوة السابقة. ثم انقر على زر “تحديد” الأخضر لتحديده.
تتيح لك حاويات Back4app تكوين عملية النشر. يمكنك تعيين الفرع الافتراضي، والدليل الجذر، وتمكين/تعطيل النشر التلقائي، وتعيين متغيرات البيئة. لا نحتاج إلى أي من ذلك، لذا دعنا فقط نسمي تطبيقنا ونضغط على “إنشاء تطبيق”.
سيستغرق Back4app بضع لحظات لبناء الحاوية وتحميلها إلى سجل الحاوية وتشغيل الحاوية. بمجرد أن تصبح الحاوية جاهزة ستتغير الحالة إلى “جاهز” وستتمكن من رؤية عنوان URL أخضر على الجانب الأيسر من الشاشة.
سيؤدي النقر على عنوان URL إلى فتح تطبيق الويب في متصفحك. ستلاحظ أن Back4app أصدر تلقائيًا شهادة SSL لتطبيقك وسيسمح لك باستضافة تطبيق Python مجانًا.
الخاتمة
في هذه المقالة، تعرفت في هذه المقالة على بايثون ومزاياها وعيوبها وخيارات النشر. لقد نجحت أيضًا في نشر واجهة برمجة تطبيقات Python RESTful API بسيطة. يجب أن تكون الآن قادرًا على إنشاء واجهات برمجة التطبيقات البسيطة ونشرها على حاويات Back4app.
يمكن العثور على كود المصدر النهائي على GitHub.
الخطوات المستقبلية
- في الوقت الحالي يتم مسح جميع البيانات مع كل عملية إعادة نشر. هذا لأن قاعدة البيانات مضمنة في صورة Docker. ضع في اعتبارك التبديل إلى مثيل قاعدة بيانات مُدار.
- ابحث في عمليات الإنشاء متعددة المراحل لتسريع عملية النشر.