3.7 KiB
JSON з байтами як Base64
Якщо ваш застосунок має отримувати і надсилати дані JSON, але потрібно включати туди двійкові дані, ви можете кодувати їх як base64.
Base64 проти файлів
Насамперед розгляньте, чи можете ви використати Файли запиту для завантаження двійкових даних і Користувацька відповідь - FileResponse для надсилання двійкових даних замість кодування їх у JSON.
JSON може містити лише строки, закодовані в UTF-8, тому він не може містити «сирі» байти.
Base64 може кодувати двійкові дані у строках, але для цього потрібно більше символів, ніж у початкових двійкових даних, тож зазвичай це менш ефективно, ніж звичайні файли.
Використовуйте base64 лише якщо справді потрібно включати двійкові дані в JSON і ви не можете використати файли для цього.
Pydantic bytes
Ви можете оголосити модель Pydantic з полями bytes, а потім використати val_json_bytes у конфігурації моделі, щоб вказати їй використовувати base64 для перевірки вхідних даних JSON; як частина цієї перевірки, вона декодує строку base64 у байти.
{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:9,29:35] hl[9] *}
Якщо ви перевірите /docs, там буде показано, що поле data очікує байти, закодовані в base64:
Ви можете надіслати запит так:
{
"description": "Some data",
"data": "aGVsbG8="
}
/// tip | Порада
aGVsbG8= - це кодування base64 для hello.
///
Після цього Pydantic декодує строку base64 і надасть вам початкові байти в полі моделі data.
Ви отримаєте відповідь приблизно таку:
{
"description": "Some data",
"content": "hello"
}
Pydantic bytes для вихідних даних
Ви також можете використовувати поля bytes з ser_json_bytes у конфігурації моделі для вихідних даних, і Pydantic серіалізує байти як base64 під час формування відповіді JSON.
{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,12:16,29,38:41] hl[16] *}
Pydantic bytes для вхідних і вихідних даних
І, звісно, ви можете використовувати ту саму модель, налаштовану на base64, щоб обробляти і вхідні дані (перевіряти) з val_json_bytes, і вихідні дані (серіалізувати) з ser_json_bytes під час отримання та надсилання даних JSON.
{* ../../docs_src/json_base64_bytes/tutorial001_py310.py ln[1:2,19:26,29,44:46] hl[23:26] *}