Skip to content

iomyaki/fastapi-blog

Repository files navigation

fastapi-blog

Стек

• эндпойнты — FastAPI;
• HTML-шаблоны — Jinja2;
• база данных — PostgreSQL;
• взаимодействие с базой (асинхронное) — SQLAlchemy;
• миграции — Alembic;
• модели данных — Pydantic;
• аутентификация — базовая, через куки и bcrypt.

Видеодемонстрация

Watch the video

Описание проекта

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

Основная страница

Основная страница блога располагается по адресу /api/blog, ссылка на неё расположена на любой другой странице сайта. В шапке страницы расположены ссылки на вход и регистрацию, если пользователь не выполнил вход, иначе — ссылки на страницу пользователя (GET /api/users/{user_id}), создание новой публикации (GET /api/blog/create) и выход (GET /api/logout). Под шапкой расположена ссылка на список пользователей блога. В теле страницы расположены записи блога, отсортированные по дате публикации (чем новее, тем выше), каждая публикация выделена в отдельный блок: название (со ссылкой на саму запись), часть текста записи, автор (со ссылкой на страницу автора) и дата публикации.

Список пользователей

На список пользователей /api/users можно перейти с основной страницы. Он представляет собой таблицу с полями: никнейм, роль, дата регистрации, количество опубликованных постов и дата последней публикации. Пользователи сортируются по убыванию количества записей, даты последней публикации и даты регистрации.

Страница пользователя

На страницу пользователя /api/users/{user_id} можно перейти со списка пользователей, с основной страницы, со страницы публикации, из шапки основной страницы, если пользователь выполнил вход. В шапке страницы указаны никнейм пользователя и дата его регистрации, а если пользователь вошёл на сайт и находится на своей странице — кнопка «Опубликовать новый пост…». Ниже расположена таблица с публикациями, отсортированными по убыванию даты публикации и полями: название публикации, её дата и превью.

Страница публикации

На страницу публикации /api/blog/{blog_id} можно перейти с основной страницы, со страницы пользователя, автоматически после публикации записи. Страница содержит название публикации, ссылку на её автора, дату публикации и полный текст записи.

Страница создания записи

На страницу создания новой записи в блоге /api/blog/create можно перейти с основной страницы или со своей страницы пользователя, если пользователь вошёл в систему. Пользователю предлагается ввести заголовок поста и его текст, после чего он может опубликовать запись, нажав на кнопку «Опубликовать», в результате чего будет послан POST-запрос /api/blog/create, будет создана новая запись с введёнными данными и произойдёт перенаправление на страницу этой записи.

Страница регистрации

На страницу регистрации /api/signup можно попасть с основной страницы, если пользователь не выполнил вход или разлогинился. Пользователю предлагается придумать свои логин и пароль и подтвердить свой выбор нажатием на кнопку «Зарегистрироваться», в результате чего будет послан POST-запрос /api/signup. В случае, если логин уже занят, произойдёт ошибка 400 "Username already exists". В противном случае данные о новом пользователе будут внесены в базу данных, а сам пользователь — переведён на страницу входа.

Страница входа

На страницу входа /api/login можно попасть с основной страницы или автоматически после регистрации. Пользователю предлагается ввести свои логин и пароль и залогиниться нажатием на кнопку «Войти», в результате чего будет послан POST-запрос /api/login. В случае, если такого пользователя не существует или был введён неверный пароль, произойдёт ошибка 400 "Invalid username or password". В противном случае данные о сессии будут записаны, и пользователь будет перенаправлен на основную страницу с возможностью создавать новые посты.

Выход из системы

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published