«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Мой путь создания приложения CLI для управления событиями

Мой путь создания приложения CLI для управления событиями

Опубликовано 25 августа 2024 г.
Просматривать:209

My Journey Creating an Event Management CLI App

Мой путь создания приложения CLI для управления событиями

Введение

Для новичков в разработке программного обеспечения одной из самых захватывающих и сложных задач является создание первого значимого проекта. Для меня это было приложение Event Management CLI. Этот проект не только помог мне укрепить мое понимание Python, но также познакомил меня с SQLAlchemy ORM, библиотеками CLI, такими как Click, и общими передовыми практиками разработки программного обеспечения. Размышляя об этом путешествии, я понимаю, как многому я научился и как эти навыки сформировали мою уверенность как разработчика.

Начало: изучение основ Python

Прежде чем погрузиться в этот проект, мое путешествие началось с основ Python. Изучение синтаксиса Python, структур управления, типов данных и функций стало основой, сделавшей возможным выполнение этого проекта. Я помню дни написания простых скриптов, отладки ошибок и маленьких побед, которые приходили с каждым успешным запуском. Понимание этих основ имело решающее значение, поскольку они составляют основу любого проекта Python.

Одним из самых полезных аспектов, которые я узнал на раннем этапе, было то, как управлять различными структурами данных, особенно списками, словарями и кортежами, и манипулировать ими. Эти навыки были необходимы, когда я начал работать над приложением Event Management CLI, где мне приходилось эффективно хранить и обрабатывать множество фрагментов данных.

Погружение в проект: настройка среды

Первым шагом в создании приложения 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

Одним из наиболее полезных технических аспектов, которые я узнал в ходе этого проекта, была обработка отношений в 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()

Оглядываясь назад

Оглядываясь назад, можно сказать, что этот проект стал важной вехой на моем пути как разработчика. Все началось с изучения основ Python, которые заложили основу для понимания более сложных концепций. Проект приложения Event Management CLI представлял собой идеальное сочетание Python, SQL и интерфейсов командной строки, обеспечивая комплексный опыт обучения.

Одним из главных выводов этого проекта стала важность структуры и организации кодирования. Использование виртуальных сред, управление зависимостями и поддержание чистой структуры проекта сделали процесс разработки более плавным и эффективным.

Более того, практический опыт работы с SQLAlchemy ORM и Click укрепил полученные мною теоретические знания. Понимание того, как определять связи между таблицами, выполнять миграцию баз данных и создавать удобный интерфейс командной строки, было бесценным навыком.

Заключение

Создание приложения CLI для управления событиями было сложным, но полезным опытом. Он укрепил мое понимание Python и SQLAlchemy, познакомил меня с лучшими практиками разработки программного обеспечения и улучшил мои навыки решения проблем. Любому новичку, желающему развиваться как разработчик, я настоятельно рекомендую погрузиться в такой проект. Это отличный способ применить полученные знания, открыть для себя новые инструменты и методы и создать что-то осязаемое, чем вы сможете гордиться.

https://github.com/migsldev/event-management-app

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/migsldev/my-journey-creating-an-event-management-cli-app-kkc?1 Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить это
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3