summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--day7/README.md160
1 files changed, 39 insertions, 121 deletions
diff --git a/day7/README.md b/day7/README.md
index 73b3003..8bd962f 100644
--- a/day7/README.md
+++ b/day7/README.md
@@ -1,134 +1,52 @@
-# BrandNewServer Модули
+# BrandNewServer
-## router.py
-### `Route`
-Представляет из себя класс роута. При инициализации принимает допустимые
-методы и регулярное выражение. Содержит методы для работы роутинга.
-Чтобы созданный путь стал обрабатываться необходимо поместить объект Route в таблицу роутера.
+## Что это?
+Brand-new HTTP сервер для созданный для того, чтобы похвастаться перед одноклассниками.
+Да, я могу сделать кривой HTTP сервер!
-* `check_route(url, method)`: По указанным URL и методу проверят подходит ли URL под соответсвующие настройки пути.
-* `invoke_callback(url, method, query)`: Как и `check_route` проверяет параметр на валидность, но если он валиден, то
- вызывается соответствующий обработчик.
+## Как использовать?
+Есть два способа создать обработчик пути:
-### `route(url_format, methods)`
-> *Используется как декоратор.*
+1. * Написать функцию.
+ * Создать объект Route, который будет вызывать эту функцию по заданному пути.
+ * Добавить этот объект в список _router_table (Находится в модуле router.py).
+
+2. * Написать функцию.
+ * Добавить к ней декоратор @route.
-Указание при каком url и методах в запросе должна вызываться декорируемая функция.
-При инициализации декоратора надо указать url регулярное выражение и http методы.
-В декорируемую функцию передаются параметры query из тела запроса и сматченные группы
-из регулярного выражения `url_format`. Добавляет декорируемые функции в дерево роутера.
+Изнутри оба этих метода делают абсолютно одно и то же: второй способ сам создает объект Route и добавляет
+его в _router_table.
-### `run(request)`
-Принимает разобранный http-запрос, добавляет новые cookie-данные в базу данных.
-Ищет в таблице роутера функцию, которую необходимо вызвать для обработки текущего запроса.
-При нахождении такой функции передает ей все необходимые данные о запросе.
-Если подходящая функция не была найдена возвращает обработчику статус `404 Not Found`.
+Первый способ рекомендуется для увеличения читабельности кода и централизации настроек роутера.
-## backend.py
-### Пользовательские функции
-### `get_color()`
-Специфичная для этой программы функция. Возвращает цвет фона, который
-должен быть у каждой возвращаемой страницы.
+Второй способ подойдет для небольших проектов на 2-3 обработчика.
-### `get_error_template(text, color)`
-Генерирует страницу с ошибкой.
+Свои функции можно писать в любом файле (В модулях самого сервера всё таки не рекомендуется, но никто не запрещает).
+В данном случае все обработчики находятся в модуле `backend.py` и использован первый способ задания путей
+(Они прописаны прямо в _router_table).
-### `fallback_wrong_method(query, *args)`
-Вызывается при любом url, если http-метод не GET или POST.
-Возвращает обработчику статус `405 Method Not Allowed`
+## Как запустить?
+Для запуска сервера введите в консоли `python3 main.py`
-### `index_get(query, *args)`
-Содержит страницу с формой из которой можно отправлять все остальные соответствующие запросы.
-С этой страницы запросы отсылаются на POST-версии обработчиков, которые работают эквивалентно
-GET-обработчикам. Далее будут описаны только GET-версии обработчиков.
+Аргументы командной строки:
+* `--chunk-size %SIZE%`: Количество байт, которое сервер считывает из сокета за один раз (По умолчанию - 1024).
+* `--bg-color %COLOR%`: Устанавливает цвет фона страниц на сайте (По умолчанию - белый).
+* `--short-log`: Включает режим короткого лога (По умолчанию - выключен).
+* `--show-errors`: Включает режим показа всех ошибок (По умолчанию - выключен).
+* `--log %PATH%`: Путь до файла с логом (По умолчанию - logs/log.log).
+* `--cookies-db %PATH%`: Путь до файла хранения приходящих cookies (По умолчанию - выключен).
+* `--host %HOST%`: Адрес, на котором запустится сервер (По умолчанию - 0.0.0.0).
+* `--port %PORT%`: Порт, на котором запустится сервер (По умолчанию - 8888).
-* `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` записаны некоторые настройки, которые неудобно задавать через командную строку.
+Также тут можно хранить пользовательские переменные.
+* `TEXT_TEMPLATE_NAME`: (*Пользовательская переменная*) Название шаблона с обычной текстовой страницей.
+* `FORM_TEMPLATE_NAME`: (*Пользовательская переменная*) Название шаблона с формой страницей.
+* `CONFIG_DB_PATH`: Путь до файла с конфигурацией сервера.
-## main.py
-Обрабатывает переданные аргументы командной строки, инициализирует
-базу данных с конфигурацией сервера и запускает его.
-
-## 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`. Также тут
-обрабатывается остановка сервера при нажатии `Ctrl+C`
-
-### `log_requests(func)`
-> *Используется как декоратор.*
-
-Логирует в файл все запросы, приходящие в функцию `process_request`.
-
-### `parse_request(connection)`
-Принимаем запрос от клиента и тут же парсим заголовки. Если в теле
-запроса приходят дополнительные данные, то они тоже обрабатываются.
-
-### `process_request(address, request)`
-> *Эта функция логируется с помощью функции* `log_func`
-
-Проверяется валидность url. Если url валиден,
-то запрос отправляется на обработку в `backend.py`.
-
-### `handle_connection(connection, address)`
-Как только к серверу присоединяется какой-то клиент,
-то это соединение обрабатывается тут. С помощью `get_request`
-принимаются заголовки и отправляются в `process_request`. Ответ
-клиенту, полученный из бекэнда, отправляется тут.
-
-### `get_color()`
-Специфичная для этой программы функция. Возвращает цвет фона, который
-должен быть у каждой возвращаемой страницы.
-
-## templater.py
-### `render_template(template_name, **kwargs)`
-Нам постоянно нужно присылать однотипные HTML-странички и для этого пригодится HTML-шаблонизатор,
-который может по небольшому количеству изменяемых параметров вернуть готовую страницу.
-При каждом вызове шаблон загружается заново, поэтому нет необходимости перезагружать сервер при изменении шаблона.
-
-## utils.py
-Константы для ответов в http запросах.
-
-Функции, необходимые для обработки любых http-запросов.
-* `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)
-* `url_encoder(line)`: [кодирование url](https://en.wikipedia.org/wiki/Percent-encoding)
-
-# Директории
Перед запуском сервера необходимо предварительно создать следующие директории:
-## db
-По умолчанию в этой директории создадутся базы данных сервера.
-
-## logs
-По умолчанию в эту директорию будет записываться лог сервера.
-
-## templates
-Для использования шаблонизатора сервер **должен** содержать в рабочей директории
-папку templates в которой будут находиться все html-шаблоны.
+* `db`: По умолчанию в этой директории создадутся базы данных сервера.
+* `logs`: По умолчанию в эту директорию будет записываться лог сервера.
+* `templates`: Для использования шаблонизатора сервер **должен** содержать в рабочей директории
+ папку templates в которой будут находиться все html-шаблоны.