API для получения вопросов с ответами, которые можно использовать, например, в викторине.
- Добавить логгирование
Создайте в корне проекта файл с именем '.env_non_dev' и заполните его данными:
POSTGRES_SERVER=db:5432 # хост и порт базы данных в формате HOST_DB:PORT_DB
POSTGRES_USER=postgres # имя пользователя базы данных
POSTGRES_PASSWORD=postgres
POSTGRES_DB=postgres # название базы данных
Создание и запуск контейнеров выполняется командой:
docker-compose up -d --build
Создайте в корне проекта файл с именем '.env' и заполните его данными:
POSTGRES_SERVER=localhost:5432 # хост и порт базы данных в формате HOST_DB:PORT_DB
POSTGRES_USER=postgres # имя пользователя базы данных
POSTGRES_PASSWORD=postgres
POSTGRES_DB=postgres # название базы данных
Создание и активация виртуального окружения:
python3 -m venv venv # MacOS и Linux
python -m venv venv # Windows
source /venv/bin/activated # MacOS и Linux
source venv/Scripts/activate # Windows
Установка зависимостей из файла requirements.txt:
python3 -m pip install --upgrade pip
pip install -r requirements.txt
Выполнение миграций(база данных PostgreSQL):
alembic init migrations
alembic revision --autogenerate -m 'DataBase creation'
alembic upgrade head
Запуск сервера(выполняется из корневой директории):
uvicorn main:app --reload
http://127.0.0.1:8000/
Получение вопросов из базы данных:
GET http://127.0.0.1:8000/?skip=3&limit=2
в ответе:
[
{
"id": 6735,
"question": "Federal Hall, where Washington took 1st oath of office as President, is on this NYC street",
"answer": "Wall Street",
"created_at": "2022-12-30T18:40:18.917000"
},
{
"id": 58206,
"question": "If you don't know the name of a male ass or donkey, you don't know this",
"answer": "Jack",
"created_at": "2022-12-30T19:02:34.525000"
}
]
Получение из стороннего ресурса новых вопросов и добавление их в базу данных:
POST http://127.0.0.1:8000/
в body:
{
"questions_num": 1
}
в ответе:
[
{
"id": 40424,
"question": "This hot spot is usually found under a mantel",
"answer": "a fireplace",
"created_at": "2022-12-30T22:54:27.015000"
}
]
Пример ответа при ошибке валидации:
{
"detail": [
{
"loc": [
"body",
21
],
"msg": "Expecting value: line 2 column 20 (char 21)",
"type": "value_error.jsondecode",
"ctx": {
"msg": "Expecting value",
"doc": "{\n \"questions_num\": test\n}",
"pos": 21,
"lineno": 2,
"colno": 20
}
}
]
}
http://127.0.0.1:8000/docs
http://127.0.0.1:8000/redoc
pytest -v -s
Автор: Семен Ванюшин