Привет! В этой статье я расскажу о том, как я создал приложение FastAPI, использовал асинхронность и создал базу данных Postgres для хранения информации о задачах. Также я покажу, как можно разделить пространство имен в приложении, использовать внешние переменные и файл .env, создать CRUD для задач, а также написать эндпоинт для вывода списка задач. Наконец, я опишу пошаговую инструкцию по развёртыванию приложения на другом компьютере.Для начала, я установил FastAPI с помощью pip⁚
shell
pip install fastapi
Также я установил Starlette и Uvicorn⁚
shell
pip install starlette uvicorn
Далее я создал файл `main.py` и импортировал необходимые модули⁚
python
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
import os
import psycopg2
from dotenv import load_dotenv
Затем я создал модель для задачи с использованием BaseModel⁚
python
class Task(BaseModel)⁚
name⁚ str
parent_task⁚ str None
executor⁚ str
deadline⁚ str
status⁚ str
После этого я создал экземпляр приложения FastAPI⁚
python
app FastAPI
Теперь я определил функции для подключения к базе данных и создания таблицы ″tasks″⁚
python
def connect_to_db⁚
load_dotenv
conn psycopg2.connect(
dbnameos.getenv(″DB_NAME″),
useros.getenv(″DB_USER″),
passwordos.getenv(″DB_PASSWORD″),
hostos.getenv(″DB_HOST″),
portos.getenv(″DB_PORT″)
)
return conn
def create_task_table⁚
conn connect_to_db
cur conn.cursor
cur.execute(″″″
CREATE TABLE IF NOT EXISTS tasks (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
parent_task INTEGER,
executor TEXT NOT NULL,
deadline DATE NOT NULL,
status TEXT NOT NULL
)
″″″)
conn.commit
Затем я создал эндпоинт для создания задачи⁚
python
@app.post(″/tasks/»)
async def create_task(task⁚ Task)⁚
conn connect_to_db
cur conn.cursor
cur.execute(″″″
INSERT INTO tasks (name, parent_task, executor, deadline, status)
VALUES (%s, %s, %s, %s, %s)
RETURNING id
″″″, (task.name, task.parent_task, task.executor, task.deadline, task.status))
task_id cur.fetchone[0]
conn.commit
return {″task_id″⁚ task_id}
Также я создал эндпоинт для получения списка задач⁚
python
@app.get(″/tasks/»)
async def get_tasks⁚
conn connect_to_db
cur conn.cursor
cur.execute(″SELECT * FROM tasks″)
tasks cur.fetchall
task_list []
for task in tasks⁚
task_dict {
″id″⁚ task[0],
″name″⁚ task[1]٫
″parent_task″⁚ task[2],
″executor″⁚ task[3],
″deadline″⁚ task[4],
″status″⁚ task[5]
}
task_list.append(task_dict)
return {″tasks″⁚ task_list}
Далее я добавил поддержку разделения пространства имен⁚
python
from fastapi import APIRouter
router APIRouter
@router.get(″/tasks/»)
async def get_tasks⁚
# код для получения списка задач
app.include_router(router, prefix″/api/v1″)
Теперь я добавил поддержку внешних переменных и файл .env⁚
python
load_dotenv
DB_NAME os.getenv(″DB_NAME″)
DB_USER os.getenv(″DB_USER″)
DB_PASSWORD os.getenv(″DB_PASSWORD″)
DB_HOST os.getenv(″DB_HOST″)
DB_PORT os.getenv(″DB_PORT″)
@app.on_event(″startup″)
async def create_db_connection⁚
global conn
conn connect_to_db
create_task_table
@app.on_event(″shutdown″)
async def close_db_connection⁚
conn.close
Наконец, я создал файл `requirements.txt`, в котором указал все необходимые зависимости, и файл `.env`, где я задал значения переменных окружения.Для развёртывания приложения на другом компьютере следуйте этим шагам⁚
1. Установите Python и pip, если они ещё не установлены.
2. Скопируйте проект на другой компьютер.
3. Создайте виртуальное окружение и активируйте его.
4. Установите все зависимости, выполнив команду `pip install -r requirements.txt`;
5. Создайте файл `.env` и заполните его значениями переменных окружения.
6. Запустите приложение, выполнив команду `uvicorn main⁚app —reload`.
7. Откройте веб-браузер и перейдите по адресу `http://localhost:8000/api/v1/tasks/` для получения списка задач.
Вот и всё! Теперь у вас есть приложение FastAPI с базой данных Postgres, асинхронностью и эндпоинтами для создания и получения списка задач. Вы можете использовать эту статью как руководство для создания своего собственного приложения на FastAPI. Удачи!