neeearina / eduAPI

API c информацией о кружках доп. образования. Учебный проект

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

eduAPI - API c информацией о кружках и о занятиях дополнительного образования

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

Инструкция по запуску проекта

Склонируйте репозиторий с помощью git команды:

git clone https://github.com/neeearina/eduAPI.git

Создайте виртуальное окружение и активируйте его:

python3 -m venv venv 
source venv/bin/activate 

Установите зависимости проекта:

pip install -r requirements.txt

Переменные виртуального окружения

В текущей директории создайте файл .env и заполните соими данными по примеру файла .env_example

SECRET_KEY - секретный ключ для jwt токена
ALGORITHM - алгоритм для шифрования
ACCESS_TOKEN_EXPIRE_MINUTES - время действия токена

Примените миграции для базы данных:

alembic upgrade 153fb29cf9e4

Перейдите в директорию с базой данных:

cd app
Должен появиться файл db.sqlite. ERD базы данных

Заполните БД фейковыми данными, запустив файл fake_data.py

Запустите сервер командой и перейдите по ссылке в терминале:

uvicorn main:app --reload

Документация проекта находится по пути /docs


Здесь просто заметки для меня, чтобы я ничего не забыла))

Работа с alembic

Установить и инициализировать

pip install alembic
alembic init migrations
После инициализации будет создана директория migrations (с файлами readme, env.py, script.py.mako).

В директории, где выполнялся скрипт появляется файл alembic.ini.

Настройка

  • В файле alembic.ini настроить sqlalchemy.url - указать путь до базы данных.

  • В файле env.py настроить переменную target_metadata, в которую передается базовый класс для моделей-таблиц.

  • Импорты классов таблиц-моделей лучше сделать в файл init в том же пакете, где объявлен базовый класс.

Первая миграция

alembic revision --autogenerate -m 'initial'
initial - название первой миграции

Применить миграцию

alembic upgrade 4be659b1e34b
4be659b1e34b - хеш миграции из комментария Revision ID в последнем файле в папке migrations/versions

После выполнения команды выше - создаются таблицы в бд

Если в таблицах что-то изменилось, то снова сгенерировать миграцию и применить ее.


Работа с авторизацией и jwt-токенами

  1. Сначала пользователь регистрируется по ендпоинту /users
  2. Далее по ендпоинту /login отправляет данные для получения jwt-токена
  3. jwt-токен можно использовать для защищенных роутов (Token Bearer)

Docker

Dockerfile - файл с командами для записи образа

Процесс создания образа

docker build -t NameApp .
После -t название образа; точка - текущая директори с докер файлом

Посмотреть все образы

docker images

Запустить контейнер из образа

docker run -p 3001:8001 8f3ce4170bdc

docker-compose

docker-compose.yml - файл с указанием нескольких образов. docker-compose и Dockerfile можно связать

Собрать образ

docker-compose build

Запустить

docker-compose up

Выгрузить в хаб

Авторизация и выгрузка

docker login
docker push neeearina/meapp:latest
Обязательно ник, название контейнера, версия

Снова скачать образ и запустить контейнер

docker pull neeearina/meapp:latest
docker run -p 3001:80 --name ContainerName neeearina/meapp
Следитьза ппортами, к которым идет привязка:)

Другие рандомные заметки

Запустить тесты для проекта из корнейвой директории:

pytest

Фикстуры

Для сохранения данных в фикстуры запустить файл fixtures/load.py
Для заполнения бд данными из фикстур запустить файл fixtures/dump.py

Что доработать/улучшить на досуге)

  1. Загрузка/выгрузка фикстур работает не всегда - иногда не видит файл с БД. Либо же найти решение, чтобы избавиться от костылей))
  2. Написать тесты - исправить структуру проекта + для работы с тестовой БД надо изначально создавать ее по другому
  3. Редактировать/удалять данные на роутах могут только те пользователи, которые создавали эти данные
  4. Классы моделей распределить по файлам и вынести в отдельную папку. Если их вынести сейчас, то alembic перестанет видеть модели
  5. НАСТРОИТЬ DOCKER ААААААААААААааааААААА

About

API c информацией о кружках доп. образования. Учебный проект


Languages

Language:Python 98.3%Language:Mako 1.7%