# BrandNewServer Модули ## templater.py ### `render_template(template_name, **kwargs)` Нам постоянно нужно присылать однотипные HTML-странички и для этого пригодится HTML-шаблонизатор, который может по небольшому количеству изменяемых параметров вернуть готовую страницу. ## http_handler.py ### `main(host, port)` Запускает сервер по адресу `host:port`. Также тут обрабатывается остановка сервера при нажатии `Ctrl+C` ### `log_requests(func)` *Используется как декоратор.* Логирует все запросы, приходящие в функцию `process_request`. ### `get_request(connection)` Принимаем запрос от клиента и тут же парсим заголовки. Если в теле запроса приходят дополнительные данные, то они тут тоже обрабатываются. ### `process_request(address, method, url, http_ver, headers, query)` *Эта функция логируется с помощью функции* `log_func` Проверяется валидность url, парсятся Cookie-заголовки. Если url валиден, то запрос отправляется на обработку в `backend.py`. ### `handle_connection(connection, address)` Как только к серверу присоединяется какой-то клиент, то это соединение обрабатывается тут. С помощью `get_request` принимаются заголовки и отправляются в `process_request`. Ответ клиенту, полученный из бекэнда, отправляется тут. ### `get_color()` Специфичная для этой программы функция. Возвращает цвет фона, который должен быть у каждой возвращаемой страницы. ## utils.py Константы для ответов в http запросах. Функции, необходимые для обработки любых http-запросов. * `add_headers(status, html)`: добавляет заголовки к ответной html-странице * `validate_url(url)`: проверка url на правильность * `parse_cookies(cookies_line)`: парсинг cookies * `parse_headers(request_line)`: парсинг заголовков * `parse_query(query_line)`: парсинг параметров в теле заголовка * `url_decoder(url_line)`: [декодирование url](https://en.wikipedia.org/wiki/Percent-encoding) ## backend.py ### `route(url_format, methods)` *Используется как декоратор.* Указание при каком url и методах в запросе должна вызываться декорируемая функция. При инициализации декоратора надо указать url регулярное выражение и http методы. В декорируемую функцию передаются параметры query из тела запроса и сматченные группы из регулярного выражения `url_format`.