From 11979f1e220587198ba05fd3c1f88d4f81195fff Mon Sep 17 00:00:00 2001 From: Andrew Date: Fri, 24 May 2019 18:42:16 +0400 Subject: =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=B3=D0=BB=D0=B0=D0=B2=D0=BD=D0=B0=D1=8F=20=D1=81=D1=82?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B8=D1=86=D0=B0,=20=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=20=D1=88=D0=B0=D0=B1=D0=BB=D0=BE=D0=BD?= =?UTF-8?q?=D0=B8=D0=B7=D0=B0=D1=82=D0=BE=D1=80.=20=D0=9F=D0=B0=D1=80?= =?UTF-8?q?=D1=81=D0=B8=D0=BD=D0=B3=20HTTP=20=D0=B7=D0=B0=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=81=D0=BE=D0=B2=20=D1=81=D1=82=D0=B0=D0=BB=20=D0=B1?= =?UTF-8?q?=D0=BE=D0=BB=D0=B5=D0=B5=20=D1=81=D1=82=D1=80=D0=BE=D0=B3=D0=B8?= =?UTF-8?q?=D0=BC.=20=D0=A1=D0=B5=D1=80=D0=B2=D0=B5=D1=80=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BA=D0=B0=D0=BD=D1=87=D0=B8=D0=B2=D0=B0=D0=B5=D1=82=20=D1=80?= =?UTF-8?q?=D0=B0=D0=B1=D0=BE=D1=82=D1=83=20=D0=BF=D1=80=D0=B8=20=D0=BD?= =?UTF-8?q?=D0=B5=D0=B2=D0=B0=D0=BB=D0=B8=D0=B4=D0=BD=D0=BE=D0=BC=20HTTP?= =?UTF-8?q?=20=D0=B7=D0=B0=D0=BF=D1=80=D0=BE=D1=81=D0=B5.=20=D0=9D=D0=B0?= =?UTF-8?q?=D1=87=D0=B0=D1=82=D0=B0=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B0=D0=B4=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D0=B0=D1=86=D0=B8=D0=B5=D0=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day7/README.md | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 day7/README.md (limited to 'day7/README.md') diff --git a/day7/README.md b/day7/README.md new file mode 100644 index 0000000..82f5d5c --- /dev/null +++ b/day7/README.md @@ -0,0 +1,56 @@ +# 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`. -- cgit v1.2.3