Обработка 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 запросов аналогична. Для повышения производительности и надежности необходимо использовать базу данных.