Новости

В котором я создаю персональную библиотечную систему

Когда я был ребенком, меня интересовал ряд профессий, которые сейчас либо устарели, либо полностью изменились. Одна из таких мечт заключалась в том, чтобы раздавать книги и другие предметы посетителям, и в первую очередь она заключалась в том, чтобы вытащить маленькую карточку и поставить штамп с указанием даты.

Конечно, если вы бывали в библиотеке за последние 20 лет, вы знайте, что большинство из них больше так не работают. Либо библиотекарь сканирует специальные штрих-коды, либо вы сами выбираете материалы, просто размещая их по одному за раз. В любом случае вы получите распечатанный чек со всеми перечисленными материалами или электронное письмо. Я спрашиваю вас, что в этом забавного? По крайней мере, при старом способе вы обычно получали закладку для каждой книги в виде карточки с датой оплаты. Когда я стал старше и провел большую часть двух десятилетий на работе, которая мне совершенно не нравилась, я всерьез задумался о том, чтобы стать программистом. Я посещала курсы Java, Android и UNIX в местном младшем колледже, познакомилась со своим нынешним мужем и в конце концов решила, что у меня не хватит смелости по-настоящему решать проблемы с компьютерами. И, в отличие от моего мужа, у меня очень мало воображения, когда дело доходит до того, чтобы заставить их что-то делать.

Перенесемся в прошлые выходные, которые были перед Днем благодарения здесь, в США. Примерно за день до этого у меня возникла идея создать личную библиотечную систему просто для развлечения, и я снова заговорила об этом. Мой муж спросил, не хочешь ли сделать это сегодня вечером с помощью ChatGPT? И я был уверен, что не знаю, во что ввязываюсь, кроме как в кресло водителя, взволнованный ожиданием пункта назначения.

Настроение субботним вечером

Я хочу создать систему хранения книг. Не могли бы вы, пожалуйста, написать скрипт на Python, который использует SQL Alchemy для создания модели книги, хранящей эти поля: название, автор, год издания, жанр и номер штрих-кода?

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

Сначала мне было предложено установить pip sqlalchemy, которого у меня не было. Для начала мне был предоставлен скрипт на python с именем books_db. py. Затем я попросил код, который просматривал бы все книги и печатал их, и мне сказали добавить его в скрипт.

Затем дело приняло серьезный оборот. Я попросил его написать сервер Flask и базовый HTML-интерфейс для управления книгами в системе. Мне был предоставлен сервер Flask в виде app. py, а затем несколько шаблонов: base. html для использования на всех страницах, и index. html для просмотра всех книг, и add_book. html для добавления новой книги. Тогда я впервые увидел, что получилось, и подумал, что это прекрасно подойдет для черно-белого стола. Но для этого нужен был цвет.

Да, в последнее время я был занят добавлением книг, а не цветовых ключевых слов для жанров в CSS.

Зацените это

Это отличная книга, и вам стоит ее прочитать, независимо от того, считаете ли вы, что у вас есть проблема или нет.

Я попросил у чата дополнительные функции и реализовал их по частям, как это делаете вы, если вы не мазохист. Сначала появилась симпатичная маленькая кнопка удаления в корзине для мусора для каждой записи. Затем пришло время настроить CheckoutEvent. В каждом из этих событий указывается, к какой книге оно относится, является ли оно событием для выезда или регистрации заезда, а также временная метка этого события. Конечно, затем пришло время подключить историю оформления заказа к интерфейсу и сделать ее доступной, нажав на название книги.

Все, что мне на самом деле нужно было сделать, это добавить маршрут истории в app. py, обновить index. html, чтобы сделать заголовки интерактивными, и создать book_history. html, который он выдал. Затем я попросил его добавить кнопки для входа и выхода на новой странице истории оформления заказа, что включало добавление маршрутов в app. py, а также помощника для вычисления текущего статуса.

Затем мне пришлось изменить маршрут истории и обновить book_history. html с помощью реальных кнопок. И они тоже очень милые — на кнопке оформления заказа есть маленькая красная книжечка, а на кнопке регистрации — зеленая книжечка.

Синий штрих-код

На index. html страница, можете ли вы добавить окно поиска по номеру штрих-кода? И когда пользователь начнет поиск, перенаправлять его на страницу книги, где указан этот штрих-код?

Теперь пришло время запустить процесс сканирования штрих-кода. В какой-то момент я был уверен, что ChatGPT освободит мне время на ночь, поскольку я пользуюсь бесплатной моделью, но он продолжал помогать мне делать все, что я хотел, и даже предлагал новые функции.

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

Да, это отличная функция рабочего процесса.
Мы добавим поле поиска по штрих-коду на вашу индексную страницу, и когда кто-то введет штрих-код, приложение будет:

  • Найдите книгу по штрих-коду

  • Перенаправить прямо на страницу истории оформления заказа этой книги

  • Показать приятная ошибка, если штрих-код не существует

  • Я сделал то, что мне сказали, добавив маршрут поиска по штрих-коду в app. py и обновив маршрут index(), чтобы использовать его. Затем я добавил форму поиска по штрих-коду в index. html. Именно в этот момент мне пришлось придумать способ создания штрих-кодов, чтобы я мог делать маленькие наклейки для книг, на которых они полностью отсутствуют или которые были стерты каким-либо иным образом.

    У меня есть довольно простой сканер штрих-кодов 1D, и он не просканирует все. Как я вскоре выяснил, он предпочитает поддельные штрих-коды EAN, а не UPC. Наконец-то я нашел онлайн-генератор штрих-кодов и приступил к работе, начав со списка случайно сгенерированных чисел, который я составил в Excel. Я решил, что хочу, чтобы все поддельные штрих-коды начинались с 988, что достаточно близко к названию ISBN 978, и, как оказалось, мое любимое число используется дважды.

    Мы немного отвлеклись, когда я попросил чат-систему сортировать таблицу по возрастанию/убыванию, щелкая по заголовкам. Выбранный подход заключался в том, чтобы все было на стороне сервера и использовать маленькие стрелки для указания направления. Я добавил логику сортировки в app. py и обновил index. html, чтобы сделать заголовки доступными для просмотра, а также решил, что записи должны быть помечены цветом в зависимости от жанра, и реализовал эту часть без помощи GPT. Затем я устал и лег спать.

    Долгая, темная ночь программиста-одиночки

    Я достиг определенного возраста и теперь почти каждую ночь сплю в двух частях. На самом деле, я пишу эту часть сейчас, в 13:22 ночи, в бешеном темпе (2112) и в целом хорошо провожу время. Но я могу сказать вам, что мне было не очень хорошо, когда я встал с постели, чтобы продолжить работу над этой библиотечной системой пару часов спустя.

    Я как раз заходил в книги (БИП!), когда решил, что с меня хватит и нужно попробовать добавить больше функций. Я хрустнул костяшками пальцев и спросил у чата, можно ли сделать так, чтобы поиск работал по всем полям — названию, автору, году, жанру или штрих-коду. Он сказал: «Круто, мы можем сделать это с помощью простой SQLAlchemy или запроса». Я такой: «Как скажешь, босс, давай сойдем с ума».

    Ты можешь сделать так, чтобы поиск работал по всем полям?

    Мне пришлось импортировать or_ и обновить маршрут поиска в app. py, чтобы заменить существующий маршрут поиска по штрих-коду обобщенным поиском с использованием POST. Затем я должен был обновить index. html, чтобы переименовать входные данные в общий запрос. Круто.

    Но нет. Я кое-как все испортил и получил сообщение об ошибке из-за отсутствия {% endblock %}. В моей истории GPT написано, что я запутался в шаге 2. Куда мне его добавить? А может, я просто устал. Клянусь, я просто вывел код наверх, как мне было сказано. Но там было написано:

    Ах! Я точно понимаю, почему это сбивает с толку — ваш текущий index. html начинается с

    и затем переходит прямо в таблицу. Форма поиска должна располагаться прямо под

    и перед таблицей.

    Тогда я был действительно сбит с толку. Разве у меня уже не было окна поиска, которое обрабатывало бы только штрих-коды? Я, конечно, так и сделал, вон там base. html. Так что новый код поиска оказался там. Возможно, это неправильно. Я не помню подробностей, но я поискал в Интернете информацию о своей двухслойной ошибке и вернул ее в рабочее состояние спустя много мучительных минут. Боже, как я была горда и рада, что мне не пришлось просить мужа исправлять мои ошибки утром. Я всплеснула руками и огляделась в поисках кошек, чтобы сообщить им хорошие новости, но, конечно, я была единственной, кто не спал.

    Особенности Moar!

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

    Я все еще пытаюсь придумать дополнительные функции, но сейчас я занят вводом книг, печатанием карточек для выписки на моем IBM Wheelwriter 5 и оформлением библиотечных карманов на внутренней стороне задней панели обложки всех моих книг. Если вы хотите создать свою личную библиотечную систему, я размещаю все на GitHub.

    На плечах гигантов (и роботов)

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

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


    Другие статьи: