diff options
Diffstat (limited to 'day7/README.md')
| -rw-r--r-- | day7/README.md | 92 |
1 files changed, 70 insertions, 22 deletions
diff --git a/day7/README.md b/day7/README.md index 82f5d5c..725990d 100644 --- a/day7/README.md +++ b/day7/README.md @@ -1,9 +1,57 @@ # BrandNewServer Модули -## templater.py -### `render_template(template_name, **kwargs)` -Нам постоянно нужно присылать однотипные HTML-странички и для этого пригодится HTML-шаблонизатор, -который может по небольшому количеству изменяемых параметров вернуть готовую страницу. +## backend.py +### `route(url_format, methods)` +> *Используется как декоратор.* + +Указание при каком url и методах в запросе должна вызываться декорируемая функция. +При инициализации декоратора надо указать url регулярное выражение и http методы. +В декорируемую функцию передаются параметры query из тела запроса и сматченные группы +из регулярного выражения `url_format`. Добавляет декорируемые функции в дерево роутера. + +### `run(request)` +Принимает разобранный http-запрос, добавляет новые cookie-данные в базу данных. +Ищет в дереве роутера функцию, которую необходимо вызвать для обработки текущего запроса. +При нахождении такой функции передает ей все необходимые данные о запросе. +Если подходящая функция не была найдена возвращает обработчику статус `404 Not Found`. + +### Пользовательские функции + +### `get_color()` +Специфичная для этой программы функция. Возвращает цвет фона, который +должен быть у каждой возвращаемой страницы. + +### `fallback_wrong_method(query, *args)` +Вызывается при любом url, если http-метод не GET или POST. +Возвращает обработчику статус `405 Method Not Allowed` + +### `index_get(query, *args)` +Содержит страницу с формой из которой можно отправлять все остальные соответствующие запросы. +С этой страницы запросы отсылаются на POST-версии обработчиков, которые работают эквивалентно +GET-обработчикам. Далее будут описаны только GET-версии обработчиков. + +* divide_get(query, *args): Делит одно число на другое, доставая эти числа из url запроса. +* show_errors_get(query, *args): Включает/выключает опцию show_errors из задания. +* set_cookie_get(query, *args): Добавляет/обновляет cookie-записи в локальной базе данных. +* short_log_get(query, *args): Включает/выключает опцию short_log из задания. + +## config.py +Файл содержит конфикурационные переменные для программы. + +## db.py +Для хранения данных используется shelve. + +### `set_cookie(key, value)` +Добавляет/Обновляет данные в cookies-базе данных + +### `get_cookie(key, default)` +Получение значения из cookie-базы данных. + +### `set_config_entry(key, value)` +Добавляет/Обновляет данные в базу данных конфигурации сервера. + +### `get_config_entry(key, default=None)` +Получение значения из базы данных конфигурации сервера. ## http_handler.py ### `main(host, port)` @@ -11,18 +59,18 @@ обрабатывается остановка сервера при нажатии `Ctrl+C` ### `log_requests(func)` -*Используется как декоратор.* +> *Используется как декоратор.* -Логирует все запросы, приходящие в функцию `process_request`. +Логирует в файл все запросы, приходящие в функцию `process_request`. -### `get_request(connection)` +### `parse_request(connection)` Принимаем запрос от клиента и тут же парсим заголовки. Если в теле -запроса приходят дополнительные данные, то они тут тоже обрабатываются. +запроса приходят дополнительные данные, то они тоже обрабатываются. -### `process_request(address, method, url, http_ver, headers, query)` -*Эта функция логируется с помощью функции* `log_func` +### `process_request(address, request)` +> *Эта функция логируется с помощью функции* `log_func` -Проверяется валидность url, парсятся Cookie-заголовки. Если url валиден, +Проверяется валидность url. Если url валиден, то запрос отправляется на обработку в `backend.py`. ### `handle_connection(connection, address)` @@ -35,22 +83,22 @@ Специфичная для этой программы функция. Возвращает цвет фона, который должен быть у каждой возвращаемой страницы. +## templater.py +### `render_template(template_name, **kwargs)` +Нам постоянно нужно присылать однотипные HTML-странички и для этого пригодится HTML-шаблонизатор, +который может по небольшому количеству изменяемых параметров вернуть готовую страницу. +При каждом вызове шаблон загружается заново, поэтому нет необходимости перезагружать сервер при изменении шаблона. + ## utils.py Константы для ответов в http запросах. Функции, необходимые для обработки любых http-запросов. -* `add_headers(status, html)`: добавляет заголовки к ответной html-странице -* `validate_url(url)`: проверка url на правильность +* `add_text_headers(status, html)`: добавляет заголовки к ответной html-странице +* `validate_url(url)`: проверка url на валидность. +* `validate_first_line(line)`: проверка первой строки http-запроса на валидность. * `parse_cookies(cookies_line)`: парсинг cookies +* `format_cookies(cookies)`: формирование cookie-строки из переданного словаря. * `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`. +* `url_encoder(line)`: [кодирование url](https://en.wikipedia.org/wiki/Percent-encoding) |