Skip to content

Пет проект по типу инстаграм на Flask + Blueprints + Templates + тесты

Notifications You must be signed in to change notification settings

arkuz/coursework2_source

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Описание

Пет проект по типу инстаграм на Flask + Blueprints + Templates + тесты

Требования к ПО

  • Инструменты pyenv и poetry.
  • Python 3.10

Установка и запуск

  1. Устанавливаем виртуальное окружение и зависимости проекта:
poetry install
  1. Запускаем виртуальное окружение
poetry shell
  1. Запускаем проект
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 – идентификатор (номер) комментарий

Шаг 0 – подготовьте необходимые функции

Прежде, чем приступать к написанию 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.

Организуйте тесты в виде классов или функций, на ваше усмотрение.

Шаг 1 – реализуйте ленту

Создайте представление для всех постов, это должна быть главная страница.

GET /

В нем должно показываться столько постов, сколько есть. Найдите и используйте подходящий шаблон. Замените в каждом шаблоне пути к файлу стилей и картинкам. Замените их на /static/img и /static/css соответственно!

Шаг 2 – реализуйте просмотр поста

Создайте представление для одного поста

GET /posts/<postid>

Получите комментарии из файла comments.json, у которых соответствующий postid.

Выведите комментарии к посту.

Не обрабатывайте теги – вы сделаете это в одном из следующих шагов.

Шаг 3 – реализуйте поиск

Создайте представление для поиска по маршруту GET /search/?s=...

В нем должно отображаться 10 постов, если есть.

Поиск должен выполняться по вхождению ключевого слова в текст поста. Регистрозависимость на ваше усмотрение.

Найдите и используйте подходящий шаблон для вывода результатов.

Шаг 4 – Реализуйте вывод по пользователю

Создайте представление с выводом постов конкретного пользователя GET /users/<username>. Выведите те посты у которых poster name соответствует username из запроса. Используйте шаблон user-feed

Шаг 5 – Добавьте обработчики ошибок

Добавьте обработчик запросов к несуществующим страницам, например /meow и верните в этом случае статус-код 404.

Добавьте обработчик ошибок, возникших на стороне сервера (ошибка 500, Internal Server Error ) и верните в этом случае статус-код 500.

Шаг 6 – сделайте 2 API - эндпоинта

Создайте представление, которое обрабатывает запрос GET /api/posts и возвращает полный список постов в виде JSON-списка.

Создайте представление, которое обрабатывает запрос GET /api/posts/<post_id> и возвращает один пост в виде JSON-словаря.

Шаг 7 – залогируйте обращения к эндпоинтам API

Используйте стандартный 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

Шаг 8 – добавьте тест на API

Протестируйте эндпоинт GET /api/posts , проверьте, что

  • возвращается список
  • у элементов есть нужные ключи

Не проверяйте количество элементов в списке, так как оно может меняться

Протестируйте эндпоинт GET /api/posts/<post_id> , проверьте, что

  • возвращается словарь
  • у элемента есть нужные ключи

Не проверяйте данные в полученном словаре, это не обязательно.

Критерии проверки:

  • Обработка данных их формы выполняется корректно
  • Вывод нефильтрованного списка выполняется корректно
  • Вывод фильтрованного списка выполняется корректно
  • Работа с данными вынесена в функции или отдельный класс
  • Данные фильтруются до передачи в шаблон, лишние данные в шаблон не передаются

Как сдавать задание

Загрузить программу на гитхаб и приложить в дз на платформе Skypro ссылку на файл на гитхабе.


SkyPro - Python Developer

About

Пет проект по типу инстаграм на Flask + Blueprints + Templates + тесты

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •