Если вы решите изучить исходный код фреймворка Flask, и в особенности метод __call__ класса Flask, то обнаружите, что это классическое WSGI-приложение.
Напишите собственное WSGI-приложение, которое удовлетворяет стандарту, и подмените им программу Hello, world. При этом сохраните существующую функциональность: дефолтное поведение для URL /hello и персонифицированное — для /hello/user, а также появление ошибки 404, если страницы нет. Ответ должен быть JSON-строкой.
23 практическая работа
1. Написать собственное WSGI-приложение.
2.Настроить раздачу статики с помощью Nginx.
3.Увеличить тайм-аут ответа.
Сразу предупреждаю - я художник, я так вижу и на истину не претендую. Мой вариант работы был заключен в то чтобы все три пункта обработать в одном единственном месте.
Своё собственное WSGI-приложение это класс, который и будет отрабатывать наши роуты ("/hello", "/hello/<name>" (1 задание), "/long_task" (3 задание), а так же выдавать картинку из статики (2е задание)).
По началу мне казалось всё это очень сложным, но разобравшись, на деле оказалось довольно таки просто, я даже не знаю, нужно ли что-то тут пояснять, вот собственно мое приложение которое будет отрабатывать все эти роуты:
Ну а дальше требуется только объявить экземпляр класса MyApp и прописать соответствующие роуты:
Как можно заметить, роут "/long_task", не указан, но оно всё равно отрабатывается:
Роуты из 1 задания:
Ну и в случае, если у нас роут не попал под условия которые были показаны во всех трёх случаях, при любом другом роуте, nginx должен выдать картинку из папки static, соответствующей тематики:
Всё это дело я организовал в Docker-контейнер и вот как это выглядит в коде и настройках:
Структура всего проекта:
Dockerfile
nginx.conf
requirements.txt
supervisord.ini
uwsgi.ini
Когда проект создан, осталось лишь собрать docker контейнер:
Если все собрано правильно и успешно запущено то будет об этом два сообщения в консоли, что наша связка uwsgi и nginx работает:
Ну а далее проверяем работу соответствующих роутов...