Для исправления ошибки "TypeError: Объект типа datetime нельзя сериализовать в JSON" и настройки класса FastApi для сериализации/десериализации объектов с полями, содержащими дату/время, можно создать пользовательский класс, который будет обрабатывать преобразование даты/времени в строку при сериализации в JSON и обратно при десериализации.
Пример пользователяского класса для сериализации/десериализации объектов с полями даты/времени:
```python
from datetime import datetime
import json
class DateTimeEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
return json.JSONEncoder.default(self, obj)
# Пример использования класса DateTimeEncoder
data = {
'name': 'John',
'birth_date': datetime(1990, 5, 15)
}
json_data = json.dumps(data, cls=DateTimeEncoder)
print(json_data)
# Для десериализации можно использовать стандартную функцию json.loads
```
Чтобы настроить FastApi для использования пользовательского класса при сериализации/десериализации объектов с датой/временем, можно применить его в методах API, где требуется обработка данных, содержащих даты/время. Например:
```python
from fastapi import FastAPI
from datetime import datetime
from typing import Dict
import json
class DateTimeEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, datetime):
return obj.strftime('%Y-%m-%d %H:%M:%S')
return json.JSONEncoder.default(self, obj)
app = FastAPI()
@app.post("/data")
async def create_data(data: Dict[str, datetime]):
json_data = json.dumps(data, cls=DateTimeEncoder)
return json_data
```
Таким образом, вы можете добавить функционал cls=DateTimeEncoder для json.dumps и избежать ошибок при отправке объектов с полями даты/времени в FastApi.