Если мы определим переменную с временем вне роута и передадим в качестве ответа из роута, то при обновлении вкладки браузера, время будет одним и тем же, а конкретно время будет временем когда мы запустили сервер, мы запустили сервер, время один раз вычислилось, записалось в переменную и теперь мы каждый раз его и возвращаем
t = datetime.now()
{"status": "ok", "time": t}
Мы же хотим что бы время пересчитывалось каждый раз когда мы обращаемся к роуту
{"status": "ok", "time": datetime.now()}
Flask может сам преобразовывать дату в красивый вид, но некоторые другие фреймворки этого не делают, а т.к это выражение изначально является объектом класса datetime, а не строкой, то при сериализации возвращаемого объекта в JSON, была бы ошибка
{
"time": datetime.now(), # Flask неявно
"time2": str(datetime.now()), # мы сами приводим дату к строке
"time3": datetime.now().strftime("%Y-%m-%d %H:%M:%S") # http://strftime.org/
}
TypeError: Object of type function is not JSON serializable
Здесь у нас был конфликт имён между ф-цией messages и списком messages, и когда мы отправляли из роута "/messages" список messages, на самом деле сервер пытался отправить ф-цию messages, естественно предварительно её сериализовав, поэтому мы переименовали её в messages_view
ctrl + alt + L
- форматирование
ctrl + клик мышки на название библиотеки
- в коде datetime.now(), при клике на datetime откроется код библиотеки
alt + enter
- в коде datetime.now(), при фокусе указателя на datetime появится окно в котором мы сможем быстро подключить/импортировать данную библиотеку, если она ещё не подключена
три ковычки " или ' + enter
- python docstring https://www.python.org/dev/peps/pep-0257/