Урок 88. Презентация проекта
⚡ Кратко: типичные ошибки
Избегайте самых распространённых проблем финального проекта.
- Слишком длинные функции и один огромный файл.
- Дублирование кода подключения и форматирования.
- SQL-инъекции из-за конкатенации строк.
- Неработающая или отсутствующая пагинация.
- Отсутствие обработки ошибок — программа падает при сбое базы.
- Слабая презентация: неподготовленная демонстрация и неуверенные ответы.
Что запомнить: проект оценивается не только кодом, но и подготовкой к защите.
🐛 Типичные ошибки при финальном проекте
1. Слишком длинные функции
Проблема: одна функция делает и меню, и SQL-запрос, и вывод, и логирование.
Решение: разбивайте на небольшие функции. Например, handle_keyword_search() только собирает ввод и вызывает search_by_keyword() и write_log().
2. Дублирование кода
Проблема: код подключения к MySQL скопирован в каждой функции поиска.
Решение: вынесите get_connection() в отдельную функцию и используйте with.
# Плохо
conn = pymysql.connect(host="...", user="...", password="...", database="...")
cursor = conn.cursor()
...
# Хорошо
with get_connection() as conn:
with conn.cursor() as cursor:
...
3. SQL-инъекции
Проблема: строка запроса собирается через f-string.
# Опасно!
query = f"SELECT * FROM film WHERE title LIKE '%{keyword}%'"
cursor.execute(query)
Решение: используйте параметризованные запросы.
# Безопасно
query = "SELECT * FROM film WHERE title LIKE %s"
cursor.execute(query, (f"%{keyword}%",))
4. Неработающая пагинация
Проблема: LIMIT всегда 10, но OFFSET не меняется, поэтому «следующая страница» показывает те же фильмы.
Решение: храните номер страницы и пересчитывайте OFFSET = page * 10.
page = 0
while True:
results = search_by_keyword(keyword, limit=10, offset=page * 10)
print_films(results)
if len(results) < 10:
break
next_page = input("Показать ещё? (y/n): ").strip().lower()
if next_page != "y":
break
page += 1
5. Отсутствие обработки ошибок
Проблема: если MongoDB недоступна, приложение падает с необработанным исключением.
Решение: оборачивайте операции с базами в try ... except и выводите понятные сообщения.
try:
write_log(...)
except pymongo.errors.ConnectionFailure:
print("Не удалось сохранить лог: нет подключения к MongoDB.")
6. Слабая презентация
Проблема: студент показывает код, но не может объяснить, как он работает; демонстрация затягивается или проваливается из-за неподготовленных данных.
Решение:
- Подготовьте сценарий демонстрации заранее.
- Потренируйтесь укладываться в 5 минут.
- Будьте готовы объяснить каждый модуль и SQL-запрос.
- Имейте запасной план (скриншоты или записанное видео), если база данных будет недоступна.