Rumah > Artikel > pembangunan bahagian belakang > CLI pertama saya.
Ketika semuanya diklik, pertimbangkan keseronokan projek. Saya membina projek CLI mesra pelanggan untuk memahami cara kelas, kaedah dan sifat berfungsi.
Struktur direktori saya agak mudah:
└── lib
├── model
│ ├── __init__.py
│ └── pelakon.py
| └── movie.py
├── cli.py
├── debug.py
└── pembantu.py
├── Pipfile
├── Pipfile.lock
├── README.md
Seperti yang anda lihat dari struktur saya membina persatuan satu-ke-banyak di mana seorang pelakon mempunyai banyak filem. Daripada persatuan ini menu saya mula dimainkan.
Menu saya di atas telah ditakrifkan oleh fungsi yang dipanggil... menu() yang terletak dalam fail cli.py saya bersama-sama dengan main() yang menunjukkan kepada pengguna menu 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")
Fungsi khusus ini adalah yang pertama di mana gelung sementara bersama-sama dengan pernyataan if/elif/else dilaksanakan untuk memberikan pengguna kami keupayaan untuk menavigasi menu kami dengan mudah.
Cli.py kemudiannya diakhiri dengan beberapa blok kod penting:
if __name__ == "__main__": main()
Blok kod ini memberitahu jurubahasa kami (Python) untuk hanya menjalankan fail kami jika ia dipanggil daripada baris arahan.
Terdapat juga fungsi pembantu yang terlibat dalam projek ini yang juga menggunakan gelung sementara bersama-sama dengan pernyataan if/elif/else. Satu khususnya menonjol dalam menunjukkan kemudahan navigasi apabila memilih contohnya senarai pelakon semasa kami:
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.")
Di sini bukan sahaja saya membiasakan diri dengan penyataan gelung while dan if tetapi juga mendapat faedah penampilan dan susunan dengan menggunakan enumerate() dengan gelung for untuk berulang dengan indeks dalam python yang membenarkan semua senarai melalui projek menjadi senarai tersusun.
Dua watak utama kami sudah tentu ialah Pelakon Kelas dan Filem. Kedua-duanya terdiri daripada kod yang serupa dari segi kaedah kelas semasa membuat, mengemas kini atau memadam contoh kelas tertentu itu, tetapi terdapat perbezaan:
Jom ambil kelas Filem kami sebagai contoh:
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
Memandangkan kami mempunyai persediaan projek kami di mana seorang pelakon mempunyai banyak filem, kelas filem kami akan mempunyai parameter/atribut actor_id yang unik untuk mewujudkan pautan antara contoh filem dan pelakon tertentu, membolehkan rujukan mudah kepada maklumat pelakon.
Sekarang lihat blok kod ini dalam kelas Pelakon kami:
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 ]
Di sini kami mempunyai kaedah movies() kami untuk mendapatkan semula semua filem yang dikaitkan dengan contoh Pelakon semasa dengan menanyakan jadual filem menggunakan ID pelakon. Ini kemudiannya akan mengembalikan senarai objek Filem, mewujudkan hubungan "mempunyai banyak" antara Pelakon dan Filem.
Blok kod yang dibincangkan adalah bidang utama projek yang saya fokuskan untuk memahami lebih banyak pemahaman. Secara keseluruhan projek ini berfungsi sebagai latihan yang baik untuk meningkatkan kemahiran saya dalam ular sawa.
Atas ialah kandungan terperinci CLI pertama saya.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!