Отправить HTML-форму#

Используйте Form[T] для входа через HTML-форму и других методов, которые принимают application/x-www-form-urlencoded.

→ Request · POST /login

Content-Type: application/x-www-form-urlencoded

email=ada%40mail.example&password=mail-password

← Response · 200 OK

{"account": "ada@mail.example", "access_token": "session-1"}
# examples/docs/request_form.py
@dataclass(frozen=True, slots=True, kw_only=True)
class Login(HttpOperation[Session]):
    __http__ = Http.post("/login")

    email: Form[str]
    password: Form[str]
    remember: Form[Omittable[bool]] = UNSET


class AuthApi(SyncApi):
    login = op(Login)

email и password обязательны. remember=UNSET не добавляет поле в тело. Для одной модели целиком используйте FormBody() и не смешивайте её с отдельными полями Form.

Файл примера целиком
"""Encode operation fields as an HTML form body."""

from __future__ import annotations

from dataclasses import dataclass

from eazy_sdk import UNSET, Http, HttpOperation, Omittable, SyncApi, op
from eazy_sdk.request import Form
from examples.docs.request_site import request_client

DEMO_CREDENTIALS = ("ada@mail.example", "mail-password")


@dataclass(frozen=True, slots=True)
class Session:
    account: str
    access_token: str


# docs:example:start
# examples/docs/request_form.py
@dataclass(frozen=True, slots=True, kw_only=True)
class Login(HttpOperation[Session]):
    __http__ = Http.post("/login")

    email: Form[str]
    password: Form[str]
    remember: Form[Omittable[bool]] = UNSET


class AuthApi(SyncApi):
    login = op(Login)
# docs:example:end


def main() -> None:
    with request_client() as client:
        session = AuthApi(client).login(
            email=DEMO_CREDENTIALS[0],
            password=DEMO_CREDENTIALS[1],
        )

    print(f"session: {session.account} {session.access_token}")


if __name__ == "__main__":
    main()

Запуск: uv run python examples/docs/request_form.py.

session: ada@mail.example session-1

Дальше#