Пет проект по типу инстаграм на Flask + Blueprints + Templates + тесты
- Инструменты pyenv и poetry.
- Python 3.10
- Устанавливаем виртуальное окружение и зависимости проекта:
poetry install- Запускаем виртуальное окружение
poetry shell- Запускаем проект
python app.pyВ этом задании вам предстоит написать свой Instagram с едой, котами и еще раз едой!
Скопируйте репозиторий со всеми данными: https://github.com/skypro-008/coursework2_source
Вы найдете в нем список постов, картинки, шаблоны HTML и CSS-стили.
Переложите шаблоны в папку templates.
Переложите стили и картинки в папку static.
Обратите внимание: данные хранятся раздельно.
Посты вместе с информацией об авторе и его аватаркой хранятся в файле posts.json, а комментарии хранятся в файле comments.json. Также создан файл bookmarks.json, где можно будет хранить закладки.
У каждого поста указаны:
poster_name — имя/юзернейм автора поста,
poster_avatar — аватарка автора поста,
pic — картинка поста,
content — текст поста,
views_count — количество просмотров,
likes_count — количество лайков,
pk — id или номер поста.
Обратите внимание, количество комментариев не указано!
У каждого комментария указаны:
post_id – к какому посту этот комментарий
commenter_name – имя комментатора
comment – текст комментария
pk – идентификатор (номер) комментарий
Прежде, чем приступать к написанию Flask-приложения, полезно разработать функции, для работы с данными и сложить их в отдельном файле, например, utils.py. Например:
get_posts_all() – возвращает посты
get_posts_by_user(user_name) – возвращает посты определенного пользователя. Функция должна вызывать ошибку ValueError если такого пользователя нет и пустой список, если у пользователя нет постов.
get_comments_by_post_id(post_id) – возвращает комментарии определенного поста. Функция должна вызывать ошибку ValueError если такого поста нет и пустой список, если у поста нет комментов.
search_for_posts(query) – возвращает список постов по ключевому слову
get_post_by_pk(pk) – возвращает один пост по его идентификатору.
Напишите к каждой функции юнит тесты, расположите тесты в отдельной папке /tests.
Организуйте тесты в виде классов или функций, на ваше усмотрение.
Создайте представление для всех постов, это должна быть главная страница.
GET /
В нем должно показываться столько постов, сколько есть. Найдите и используйте подходящий шаблон. Замените в каждом шаблоне пути к файлу стилей и картинкам. Замените их на /static/img и /static/css соответственно!
Создайте представление для одного поста
GET /posts/<postid>
Получите комментарии из файла comments.json, у которых соответствующий postid.
Выведите комментарии к посту.
Не обрабатывайте теги – вы сделаете это в одном из следующих шагов.
Создайте представление для поиска по маршруту GET /search/?s=...
В нем должно отображаться 10 постов, если есть.
Поиск должен выполняться по вхождению ключевого слова в текст поста. Регистрозависимость на ваше усмотрение.
Найдите и используйте подходящий шаблон для вывода результатов.
Создайте представление с выводом постов конкретного пользователя GET /users/<username>. Выведите те посты у которых poster name соответствует username из запроса. Используйте шаблон user-feed
Добавьте обработчик запросов к несуществующим страницам, например /meow и верните в этом случае статус-код 404.
Добавьте обработчик ошибок, возникших на стороне сервера (ошибка 500, Internal Server Error ) и верните в этом случае статус-код 500.
Создайте представление, которое обрабатывает запрос GET /api/posts и возвращает полный список постов в виде JSON-списка.
Создайте представление, которое обрабатывает запрос GET /api/posts/<post_id> и возвращает один пост в виде JSON-словаря.
Используйте стандартный logging, логи должны храниться в папке logs в файле api.log . Формат логов должен быть таким:
%(asctime)s [%(levelname)s] %(message)sПример:
2022-03-18 18:48:56 [INFO]Запрос /api/posts
2022-03-18 18:48:57 [INFO]Запрос /api/posts
2022-03-18 18:48:58 [INFO]Запрос /api/posts/2
2022-03-18 18:48:59 [INFO]Запрос /api/posts/3Протестируйте эндпоинт GET /api/posts , проверьте, что
- возвращается список
- у элементов есть нужные ключи
Не проверяйте количество элементов в списке, так как оно может меняться
Протестируйте эндпоинт GET /api/posts/<post_id> , проверьте, что
- возвращается словарь
- у элемента есть нужные ключи
Не проверяйте данные в полученном словаре, это не обязательно.
- Обработка данных их формы выполняется корректно
- Вывод нефильтрованного списка выполняется корректно
- Вывод фильтрованного списка выполняется корректно
- Работа с данными вынесена в функции или отдельный класс
- Данные фильтруются до передачи в шаблон, лишние данные в шаблон не передаются
Загрузить программу на гитхаб и приложить в дз на платформе Skypro ссылку на файл на гитхабе.