كمبتدئ في تطوير البرمجيات، فإن إحدى المهام الأكثر إثارة وصعوبة هي إنشاء أول مشروع مهم لك. بالنسبة لي، كان هذا هو تطبيق Event Management CLI. لم يساعدني هذا المشروع في تعزيز فهمي لـ Python فحسب، بل عرّفني أيضًا على SQLAlchemy ORM ومكتبات CLI مثل Click وأفضل الممارسات العامة لتطوير البرمجيات. وبالتأمل في هذه الرحلة، أدركت مقدار ما تعلمته وكيف ساهمت هذه المهارات في تشكيل ثقتي كمطور.
قبل الغوص في هذا المشروع، بدأت رحلتي بأساسيات لغة بايثون. كان تعلم بناء جملة لغة بايثون وهياكل التحكم وأنواع البيانات والوظائف هو الأساس الذي جعل التعامل مع هذا المشروع ممكنًا. أتذكر أيام كتابة النصوص البسيطة، وتصحيح الأخطاء، والانتصارات الصغيرة التي جاءت مع كل جولة ناجحة. كان فهم هذه الأساسيات أمرًا بالغ الأهمية لأنها تشكل حجر الأساس لأي مشروع بايثون.
أحد الجوانب الأكثر فائدة التي تعلمتها في وقت مبكر هو كيفية إدارة ومعالجة هياكل البيانات المختلفة، وخاصة القوائم والقواميس والصفوف. كانت هذه المهارات ضرورية عندما بدأت العمل على تطبيق Event Management CLI، حيث كان عليّ تخزين أجزاء متعددة من البيانات والتعامل معها بكفاءة.
كانت الخطوة الأولى في إنشاء تطبيق Event Management CLI هي تهيئة البيئة. كان استخدام Pipenv لإدارة البيئة الافتراضية بمثابة تجربة جديدة. لقد قام بتبسيط عملية إدارة التبعيات والتأكد من عزل بيئة المشروع عن بقية نظامي.
إليك كيفية إعداد البيئة الافتراضية:
pipenv install pipenv shell
بعد ذلك، قمت بتهيئة Alembic لعمليات ترحيل قاعدة البيانات. كانت هذه الخطوة حاسمة لإدارة تغييرات مخطط قاعدة البيانات بمرور الوقت.
alembic init migrations alembic revision --autogenerate -m "Create Initial models" alembic upgrade head
جوهر التطبيق يكمن في نماذجه. باستخدام SQLAlchemy ORM، قمت بتحديد النماذج للمستخدمين والأحداث والجداول الزمنية والحاضرين. كان هذا هو المكان الذي اجتمع فيه فهمي لفئات Python وSQLAlchemy. إليك مقتطف من ملفmodels.py:
from sqlalchemy import Column, Integer, String, ForeignKey, DateTime, create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import relationship, sessionmaker Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) username = Column(String, unique=True, nullable=False) class Event(Base): __tablename__ = 'events' id = Column(Integer, primary_key=True) name = Column(String, nullable=False) description = Column(String) user_id = Column(Integer, ForeignKey('users.id')) user = relationship('User', back_populates='events') class EventSchedule(Base): __tablename__ = 'event_schedules' id = Column(Integer, primary_key=True) event_id = Column(Integer, ForeignKey('events.id')) start_time = Column(DateTime, nullable=False) end_time = Column(DateTime, nullable=False) event = relationship('Event', back_populates='schedules') class Attendee(Base): __tablename__ = 'attendees' id = Column(Integer, primary_key=True) name = Column(String, nullable=False) event_id = Column(Integer, ForeignKey('events.id')) event = relationship('Event', back_populates='attendees') User.events = relationship('Event', order_by=Event.id, back_populates='user') Event.schedules = relationship('EventSchedule', order_by=EventSchedule.id, back_populates='event') Event.attendees = relationship('Attendee', order_by=Attendee.id, back_populates='event')
كان أحد الجوانب التقنية الأكثر فائدة التي تعلمتها خلال هذا المشروع هو التعامل مع العلاقات في SQLAlchemy. أدى تحديد العلاقات بين الجداول باستخدام ORM الخاص بـ SQLAlchemy إلى تسهيل إدارة البيانات وتنفيذ الاستعلامات. على سبيل المثال، سمح لي إنشاء علاقة رأس بأطراف بين المستخدمين والأحداث بالاستعلام بسهولة عن جميع الأحداث التي أنشأها مستخدم معين.
إليك كيفية تعريف العلاقة بين المستخدم والحدث:
class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) username = Column(String, unique=True, nullable=False) events = relationship('Event', order_by='Event.id', back_populates='user') class Event(Base): __tablename__ = 'events' id = Column(Integer, primary_key=True) name = Column(String, nullable=False) description = Column(String) user_id = Column(Integer, ForeignKey('users.id')) user = relationship('User', back_populates='events')
سمح لي تعريف العلاقة هذا بالاستعلام عن أحداث المستخدم بسهولة:
def get_user_events(user_id): user = session.query(User).filter(User.id == user_id).first() return user.events
تم تنفيذ جزء CLI من التطبيق باستخدام Click. جعلت هذه المكتبة من السهل إنشاء واجهة سطر أوامر يمكنها التعامل مع الأوامر والخيارات المختلفة. إليك مقتطف من ملف cli.py:
import click from models import User, Event, EventSchedule, Attendee from db import session @click.group() def cli(): pass @click.command() def create_event(): name = click.prompt('Enter event name') description = click.prompt('Enter event description') user_id = click.prompt('Enter user ID', type=int) event = Event(name=name, description=description, user_id=user_id) session.add(event) session.commit() click.echo('Event created!') cli.add_command(create_event) if __name__ == '__main__': cli()
إذا نظرنا إلى الوراء، فقد كان هذا المشروع علامة فارقة في رحلتي كمطور. بدأ الأمر بتعلم أساسيات لغة بايثون، والتي أرست الأساس لفهم مفاهيم أكثر تعقيدًا. كان مشروع تطبيق Event Management CLI عبارة عن مزيج مثالي من واجهات Python وSQL وسطر الأوامر، مما يوفر تجربة تعليمية شاملة.
كانت إحدى أهم النقاط التي تعلمناها من هذا المشروع هي أهمية الهيكل والتنظيم في البرمجة. إن استخدام البيئات الافتراضية وإدارة التبعيات والحفاظ على بنية مشروع نظيفة جعل عملية التطوير أكثر سلاسة وكفاءة.
علاوة على ذلك، فإن الخبرة العملية مع SQLAlchemy ORM وClick عززت المعرفة النظرية التي اكتسبتها. إن فهم كيفية تحديد العلاقات بين الجداول، وتنفيذ عمليات ترحيل قاعدة البيانات، وإنشاء واجهة سطر الأوامر (CLI) سهلة الاستخدام كانت مهارات لا تقدر بثمن.
كان إنشاء تطبيق Event Management CLI بمثابة تجربة مليئة بالتحديات ولكنها مجزية. لقد عززت فهمي لـ Python وSQLAlchemy، وعرّفتني على أفضل الممارسات في تطوير البرمجيات، وعززت مهاراتي في حل المشكلات. لأي مبتدئ يتطلع إلى النمو كمطور، أوصي بشدة بالتعمق في مشروع مثل هذا. إنها طريقة ممتازة لتطبيق ما تعلمته، واكتشاف أدوات وتقنيات جديدة، وبناء شيء ملموس يمكنك أن تفخر به.
https://github.com/migsldev/event-management-app
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3