FastAPI: GET, POST, PUT, DELETE запросы — Урок 4

Обработка GET, POST, PUT и DELETE запросов

В разработке веб-сайтов используются различные HTTP-запросы. До сих пор рассматривались только GET-запросы, используемые при прямом переходе по URL-адресу (например, /items/{item_id}). Существуют и другие типы запросов:

  • POST: Используется для отправки данных, например, для добавления элемента в базу данных.
  • PUT: Используется для редактирования существующих данных.
  • DELETE: Используется для удаления данных.

Обработка POST-запросов

Создадим функцию, обрабатывающую POST-запросы, используя Pydantic для определения типов данных. Класс PostCreate описывает структуру передаваемых данных:

class PostCreate(BaseModel):
    title: str
    body: str
    author_id: int

ID генерируется автоматически и не включен в класс. Асинхронная функция add_item обрабатывает POST-запросы:

@app.post("/items/")
async def add_item(post: PostCreate):
    # ... (логика обработки запроса) ...

URL /items/ обрабатывается только при отправке POST-запроса. Для ясности можно использовать отдельный URL, например /items/add.

Поиск автора и обработка ошибок

Функция add_item должна найти автора по author_id. Вспомогательная функция next осуществляет поиск:

async def next(user_id):
    for user in users:
        if user["id"] == user_id:
            return user
    return None

Функция next ищет пользователя в списке users по ID. Если пользователь не найден, возвращается None. В add_item проверяется результат и обрабатывается ошибка:

author = await next(post.author_id)
if not author:
    raise HTTPException(status_code=404, detail="User not found")

Создание нового поста

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

new_post_id = len(posts) + 1
new_post = {
    "id": new_post_id,
    "title": post.title,
    "body": post.body,
    "author": author
}
posts.append(new_post)
return Post(**new_post)

Генерируется новый ID, создается словарь с данными и добавляется в список posts. Функция возвращает созданный пост.

Тестирование

Функцию можно протестировать, используя инструмент try it out в документации FastAPI, отправив POST-запрос с необходимыми данными.

Хранение данных

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

Обработка PUT и DELETE запросов

Обработка PUT и DELETE запросов аналогична обработке POST-запросов. Для PUT-запроса ID редактируемого элемента указывается в URL. Для DELETE-запроса ID удаляемого элемента указывается в URL.

Рассмотрена обработка различных HTTP-запросов в FastAPI. Создана функция для обработки POST-запросов, включая поиск автора, обработку ошибок и создание нового поста. Обработка PUT и DELETE запросов аналогична. Для повышения производительности и надежности необходимо использовать базу данных.

Что будем искать? Например,программа