Найти тему
Computer Pro

Собственное WSGI-приложение

Оглавление

Если вы решите изучить исходный код фреймворка 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е задание)).

По началу мне казалось всё это очень сложным, но разобравшись, на деле оказалось довольно таки просто, я даже не знаю, нужно ли что-то тут пояснять, вот собственно мое приложение которое будет отрабатывать все эти роуты:

-2

Ну а дальше требуется только объявить экземпляр класса MyApp и прописать соответствующие роуты:

-3

Как можно заметить, роут "/long_task", не указан, но оно всё равно отрабатывается:

-4

Роуты из 1 задания:

-5
-6

Ну и в случае, если у нас роут не попал под условия которые были показаны во всех трёх случаях, при любом другом роуте, nginx должен выдать картинку из папки static, соответствующей тематики:

-7

Всё это дело я организовал в Docker-контейнер и вот как это выглядит в коде и настройках:

Структура всего проекта:

-8

Dockerfile

-9

nginx.conf

-10
-11

requirements.txt

-12

supervisord.ini

-13

uwsgi.ini

-14

Когда проект создан, осталось лишь собрать docker контейнер:

-15
-16

Если все собрано правильно и успешно запущено то будет об этом два сообщения в консоли, что наша связка uwsgi и nginx работает:

-17

Ну а далее проверяем работу соответствующих роутов...

-18

На этом всё