1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
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`.
|