Перейти к содержанию

Быстрый API

Использование Ormar и Fastapi очень просто.

Все, что вам нужно сделать, кроме подключения к базе данных при запуске, это заменить Pydantic моделью на ormar.

Здесь вы можете найти очень простой пример кода приложения.

!!! Предупреждение Этот пример предполагает, что вы создали базу данных. Если это не так, посетите раздел инициализации базы данных.

!!!tip Примеры (все части) должны быть помещены в один файл.

1
It's Divided Into subsections for clarity.

!!!note Если вы хотите узнать больше о том, как использовать модель ormar в запросах и ответах fastapi, обратитесь к документации по ответам и запросам.

Быстрое открытие

!!!note Обратите внимание, что вы можете найти полный скрипт быстрого запуска в примере репозитория github.

Импорт и инициализация.

Использование жизненного цикла FastAPI для определения запуска и закрытия программ и их использования в приложениях.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Из списка импорта, опциональный

Import Data abases
Sqimport alchemy
Fastapi import FastAPI

import ormar

Из contextlib import asynccontextmanager
Fastapi import FastAPI


Asynccontextmanager
async def lifespan (_: FastAPI)-> AsyncIterator [None]:
    if not www.example.com_connected:
        wait config. database.connect ()

    Yield

    if www.example.com_connected:
        await config.database.disconnect()


«Органа»((
    metadata= sqalchemy (),
    Database=databases.Database("sqlite://test.db")
)
app = FastAPI(lifespan=lifespan(base_ormar_config))

Info

Определение модели

Определите модель ormar с помощью соответствующих полей.

Эти модели будут использоваться вместо Pydantic.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
Bays_ormar_config (
    metadata = metadata
    database = база данных
)


Категория (Ormar.Model):
    ormar_config = base_ormar_config.copy (tablename="categories")

    id: int = ormar.Integer(primary_key =True)
    name: str = ormar.String(max_length =100)


class Item(ormar.Model):
    ormar_config = base_ormar_config ()

    id: int = ormar.Integer(primary_key =True)
    name: str = ormar.String(max_length =100)
    Категория: Optional[Категория] = ormar.ForeignKey(Категория, nullable=True)

!!!Запрос на получение дополнительной информации об определении модели в разделе "Модель".

Определение конечной точки Fastapi

Определите желаемую конечную точку и обратите внимание на то, как модель ormar используется в качестве модели response_model и параметра запроса.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
ap.get ("/items/", response_model =List[Item])
async def get_items ():
    items = await Item.objects.select ("category").all(
    Return items


app.post ("/items/", response_model =Item)
async def create_item (item: Item):
    item.save (
    Возвращение item


app.post ("/categories/", response_model = Категория)
async def create_category (категория: Category):
    category.save (
    Возвращение к категории


put("/items/{item_id}")
async def get_item (item_id: int, item: Item):
    item_db = await Item. objects.get (pk= item_id)
    return await item_db.update(**item. model_dump ())


delete("/items/{item_id}")
async def delete_item (item_id: int, item: Item = None):
    if item:
        Возвращение {"deleted_rows": await item.delete()}
    item_db = await Item. objects.get (pk= item_id)
    Возврат {"deleted_rows": await item_db.delete()}

!!!note Обратите внимание на то, как методы модели ormar, такие как save(), становятся доступными непосредственно после инициализации fastapi для вас.

!!!Примечание Обратите внимание, что вы можете напрямую вернуть модель (или список моделей)- fastapi будет для вас использовать его jsonize

Тестирование приложений

Запуск fastapi

Если вы хотите запустить этот скрипт и сначала установить uvicorn с помощью fastapi swagger

Pip установка uvicorn

Запустить Fastapi.

uvicorn <filename_without_extension>:app --reload

Теперь вы можете перейти в браузер (адрес fastapi по умолчанию 127.0.0.1: 8000/docs) и использовать api.

!!!info Вы можете прочитать больше информации о запуске fastapi в документации по fastapi.

Тестирование с помощью Pytest

Вот пример теста, который покажет, что все работает так, как ожидалось.

Сначала обязательно создайте таблицу. Если вы используете pytest, вы можете использовать стационарные устройства.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
pytest.fixture (autouse=True, scope="module")
create def_test_database ():
    engine = sqlalchemy.create_engine (DATABASE)
    metadata. create_all (engine)
    Yield
    metadata.drop_all (engine)



# here is a sample test to check the working of the ormar with fastapi

Testclient Import TestClient

def test_all_endpoints ():
    # note that Client Testis only sync, Don't use asyns here
    Client = TestClient(приложение)
    # note that you need to connect to database manually
    # or use client as contextmanager tests
    С клиентом:
        Response = client.post ("/categories/", json={"name": "test cat"})
        Категория = response.json ()
        1998 - client.post годы:
            "/items/", Json={"name": "test", "id": 1, "category": category}
        )
        item = Item(** response.json ())
        item.pk is not None

        Response = client.get ("/items/")
        items = [Item(**item) for item in response.json()]
        [0] = item

        item.name = "Новое имя"
        response = client.put (f"/items/{item.pk}", json=item. model_dump ())
        assert respons.json () = item. model_dump ()

        response = client.get ("/items/")
        items = [Item(**item) for item in response.json ()]
        assert items[0].name = "New name"

        response = client.delete (f"/items/{item.pk}", json=item. model_dump ())
        assert respons.json ().get("deleted_rows", "__UNDEFINED__") != "__UNDEFINED__"
        response = client.get ("/items/")
        Рецепт = response json()
        assert len(items) = 0

!!!Если вы хотите узнать больше о тестировании и о том, как тестировать ormar/fastapi, см. каталог тестов в репозитории github.

!!!info Вы можете прочитать больше информации о тестировании fastapi в документации по fastapi.