summaryrefslogtreecommitdiff
path: root/day7/README.md
blob: 82f5d5cf17d33ba7a92b6c10015e0f4d725e1c9c (plain)
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`.