"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > أول CLI الخاص بي.

أول CLI الخاص بي.

تم النشر بتاريخ 2024-11-03
تصفح:813

My first CLI.

فتح الاعتمادات

في اللحظة الثانية التي يصبح فيها كل شيء على ما يرام، اعتبر المشروع ممتعًا. لقد قمت ببناء مشروع CLI صديق للعميل لفهم كيفية عمل الفصل والأساليب والخصائص.

كانت بنية الدليل الخاص بي بسيطة جدًا:

└── ليب
├── النماذج
│ ├── __init__.py
│ └──فاعل.py
| └── movie.py
├── cli.py
├── تصحيح الأخطاء
└── helpers.py
├── ملف بيب
├── Pipfile.lock
├── README.md

كما ترون من الهيكل، قمت ببناء ارتباط واحد إلى متعدد حيث يكون لدى الممثل العديد من الأفلام. من هذه الرابطة دخلت قائمتي حيز التنفيذ.

  1. القائمة الحالية للممثلين
  2. إضافة ممثل
  3. حذف ممثل
  4. الخروج من البرنامج

تم تعريف قائمتي أعلاه بواسطة وظيفة تسمى... Menu() والتي كانت موجودة في ملف cli.py الخاص بي بالإضافة إلى main() التي تعرض للمستخدم قائمة CLI:

def main():
    while True:
        welcome()
        menu()
        choice = input("> ").strip()
        if choice == "1":
            actor_list()
        elif choice == "2":
            add_actor()
        elif choice == "3":
            delete_actor()
        elif choice == "4":
            exit_program()
            break
        else:
            print("Invalid choice. Try again.\n")

كانت هذه الوظيفة المحددة هي الأولى من بين العديد من الوظائف التي تم فيها تنفيذ حلقة while مع عبارات if/elif/else لمنح مستخدمنا القدرة على التنقل في قوائمنا بسهولة.

يتم بعد ذلك اختتام cli.py ببعض مجموعات التعليمات البرمجية المهمة:

if __name__ == "__main__":
    main() 

تخبر كتلة التعليمات البرمجية هذه مترجمنا (Python) بتشغيل ملفنا فقط إذا تم استدعاؤه من سطر الأوامر.

دعم المصبوب

كانت هناك أيضًا وظائف مساعدة متضمنة في هذا المشروع والتي استخدمت أيضًا حلقة while مع عبارات if/elif/else. يبرز أحدهم على وجه الخصوص في إظهار سهولة التنقل عند اختيار قائمة الممثلين الحالية لدينا على سبيل المثال:

def actor_list():

        actor_list = Actor.get_all()

        if actor_list:
            print("\n*** UPDATED LIST! ***")
            for i, actor in enumerate(actor_list, start=1):
                print(f"{i}. {actor.name}")  

            while True:
                choice = input("Press 'a' to add an actor\n"
                                "Press 'b' for actor profile\n"
                                "Press 'c' to return to the main menu.\n"
                                "Press 'd' delete an actor.\n").lower()
                if choice == 'a':
                    add_actor()
                    break
                elif choice == 'b':
                    actor_profile()
                    break
                elif choice == 'c':
                    return
                elif choice == 'd':
                    delete_actor()
                    break
                else:
                    print("Invalid choice. Please try again.") 
        else:
            print("List empty!")
            while True:
                choice = input("Press 'a' or to add an actor\n"
                        "Press 'b' for main menu.\n").lower()
                if choice == 'a':
                    add_actor()
                    break
                elif choice == 'b':
                    return
                else:
                    print("Invalid choice. Please try again.")

هنا لم اعتد على حلقة while وعبارات if فحسب، بل حصدت أيضًا فوائد المظهر والترتيب باستخدام enumerate() مع حلقة for للتكرار مع فهرس في python مما يسمح لجميع القوائم من خلال المشروع لتكون قائمة مرتبة.

عرض بعض الفئات

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

لنأخذ فصل الأفلام على سبيل المثال:

class Movie:

    all_movies = {}

    def __init__(self, movie, genre, actor_id, id=None):
        self.id = id
        self.movie = movie
        self.genre = genre
        self.actor_id = actor_id

نظرًا لأن لدينا إعداد مشروعنا حيث يكون للممثل العديد من الأفلام، فإن فئة الفيلم الخاصة بنا ستحتوي على معلمة/سمة معرف الممثل الفريدة لإنشاء رابط بين مثيل الفيلم وممثل معين، مما يتيح سهولة الرجوع إلى معلومات الممثل.

]

انظر الآن إلى مقطع التعليمات البرمجية هذا في فئة الممثل لدينا:

   def movies(self):
        from models.movie import Movie
        sql = """
            SELECT * FROM movie
            WHERE actor_id = ?
        """
        CURSOR.execute(sql, (self.id,),)

        rows = CURSOR.fetchall()
        return [
            Movie.instance_from_db(row) for row in rows
        ]

هنا لدينا طريقة الأفلام () الخاصة بنا لاسترداد جميع الأفلام المرتبطة بمثيل الممثل الحالي عن طريق الاستعلام عن جدول الأفلام باستخدام معرف الممثل. سيؤدي هذا بعد ذلك إلى إرجاع قائمة بكائنات الفيلم، وإنشاء علاقة "لديه العديد" بين الممثل والفيلم.

كانت كتل التعليمات البرمجية التي تمت مناقشتها هي المجالات الأساسية للمشروع حيث ركزت على استيعاب المزيد من الفهم. بشكل عام، كان هذا المشروع بمثابة تمرين جيد لتعزيز مهاراتي في لغة بايثون.

بيان الافراج تم نشر هذه المقالة على: https://dev.to/wormondeck/my-first-cli-2if?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3