CherryPy поставляется с собственным веб-сервером (HTTP). Вот почему CherryPy является автономным и позволяет пользователям запускать приложение CherryPy в течение нескольких минут после получения библиотеки.
Веб-сервер выступает в качестве шлюза к приложению, с помощью которого все запросы и ответы отслеживаются.
Чтобы запустить веб-сервер, пользователь должен сделать следующий вызов —
cherryPy.server.quickstart()
Внутренний движок CherryPy отвечает за следующие действия:
- Создание и управление объектами запросов и ответов.
- Контроль и управление процессом CherryPy.
CherryPy — Конфигурация
Фреймворк поставляется с собственной системой конфигурации, позволяющей параметризовать HTTP-сервер. Настройки для конфигурации могут быть сохранены в текстовом файле с синтаксисом, близким к формату INI, или в виде полного словаря Python.
Чтобы настроить экземпляр сервера CherryPy, разработчику необходимо использовать глобальный раздел настроек.
global_conf = { 'global': { 'server.socket_host': 'localhost', 'server.socket_port': 8080, }, } application_conf = { '/style.css': { 'tools.staticfile.on': True, 'tools.staticfile.filename': os.path.join(_curdir, 'style.css'), } } This could be represented in a file like this: [global] server.socket_host = "localhost" server.socket_port = 8080 [/style.css] tools.staticfile.on = True tools.staticfile.filename = "/full/path/to.style.css"
Соответствие HTTP
CherryPy развивался медленно, но он включает в себя компиляцию спецификаций HTTP с поддержкой HTTP / 1.0, позже перенесенных с поддержкой HTTP / 1.1.
CherryPy считается условно совместимым с HTTP / 1.1, поскольку он реализует все обязательные и требуемые уровни, но не все обязательные уровни спецификации. Поэтому CherryPy поддерживает следующие функции HTTP / 1.1:
-
Если клиент утверждает, что поддерживает HTTP / 1.1, он должен отправить поле заголовка в любом запросе, выполненном с указанной версией протокола. Если этого не сделано, CherryPy немедленно прекратит обработку запроса.
-
CherryPy генерирует поле заголовка Date, которое используется во всех конфигурациях.
-
CherryPy может обрабатывать код статуса ответа (100) при поддержке клиентов.
-
Встроенный в CherryPy HTTP-сервер поддерживает постоянные соединения, которые по умолчанию используются в HTTP / 1.1, с помощью заголовка Connection: Keep-Alive.
-
CherryPy правильно обрабатывает фрагментированные запросы и ответы.
-
CherryPy поддерживает запросы двумя разными способами — заголовками If-Modified-Since и If-Unmodified-Since и отправляет ответы согласно запросам соответственно.
-
CherryPy допускает любой метод HTTP.
-
CherryPy обрабатывает комбинации версий HTTP между клиентом и настройками, установленными для сервера.
Если клиент утверждает, что поддерживает HTTP / 1.1, он должен отправить поле заголовка в любом запросе, выполненном с указанной версией протокола. Если этого не сделано, CherryPy немедленно прекратит обработку запроса.
CherryPy генерирует поле заголовка Date, которое используется во всех конфигурациях.
CherryPy может обрабатывать код статуса ответа (100) при поддержке клиентов.
Встроенный в CherryPy HTTP-сервер поддерживает постоянные соединения, которые по умолчанию используются в HTTP / 1.1, с помощью заголовка Connection: Keep-Alive.
CherryPy правильно обрабатывает фрагментированные запросы и ответы.
CherryPy поддерживает запросы двумя разными способами — заголовками If-Modified-Since и If-Unmodified-Since и отправляет ответы согласно запросам соответственно.
CherryPy допускает любой метод HTTP.
CherryPy обрабатывает комбинации версий HTTP между клиентом и настройками, установленными для сервера.
Многопоточный сервер приложений
CherryPy разработан на основе концепции многопоточности. Каждый раз, когда разработчик получает или задает значение в пространстве имен CherryPy, это делается в многопоточной среде.
И cherrypy.request, и cherrypy.response являются контейнерами потоковых данных, которые подразумевают, что ваше приложение вызывает их независимо, зная, какой запрос передается через них во время выполнения.
Серверы приложений, использующие многопоточный шаблон, не очень ценятся, поскольку использование потоков рассматривается как увеличение вероятности возникновения проблем из-за требований синхронизации.
Другие альтернативы включают в себя —
Многопроцессный шаблон
Каждый запрос обрабатывается своим собственным процессом Python. Здесь производительность и стабильность работы сервера можно рассматривать как лучшую.
Асинхронная картина
Здесь принятие новых соединений и отправка данных обратно клиенту выполняется асинхронно из процесса запроса. Этот метод известен своей эффективностью.
URL-рассылка
Сообщество CherryPy хочет быть более гибким, и что другие решения для диспетчеров будут оценены по достоинству. CherryPy 3 предоставляет другие встроенные диспетчеры и предлагает простой способ написания и использования ваших собственных диспетчеров.
- Приложения, используемые для разработки методов HTTP. (GET, POST, PUT и т. Д.)
- Тот, который определяет маршруты в URL — Routes Dispatcher
Диспетчер методов HTTP
В некоторых приложениях URI не зависят от действия, которое должно выполняться сервером на ресурсе.
Например, http://xyz.com/album/delete/10
URI содержит операцию, которую клиент желает выполнить.
По умолчанию диспетчер CherryPy будет отображаться следующим образом:
album.delete(12)
Вышеупомянутый диспетчер упомянут правильно, но может быть сделан независимым следующим образом —
http://xyz.com/album/10
Пользователь может задаться вопросом, как сервер отправляет точную страницу. Эта информация переносится самим HTTP-запросом. Когда есть запрос от клиента к серверу, CherryPy выглядит наилучшим подходящим обработчиком, обработчиком является представление ресурса, на который нацелен URI.
DELETE /album/12 HTTP/1.1
Диспетчер маршрутов
Вот список параметров для метода, требуемого при диспетчеризации —
-
Параметр name — это уникальное имя маршрута для подключения.
-
Маршрут является шаблоном для сопоставления URI.
-
Контроллер — это экземпляр, содержащий обработчики страниц.
-
Использование диспетчера маршрутов соединяет шаблон, соответствующий URI, и связывает определенный обработчик страницы.
Параметр name — это уникальное имя маршрута для подключения.
Маршрут является шаблоном для сопоставления URI.
Контроллер — это экземпляр, содержащий обработчики страниц.
Использование диспетчера маршрутов соединяет шаблон, соответствующий URI, и связывает определенный обработчик страницы.
пример
Давайте возьмем пример, чтобы понять, как это работает —
import random import string import cherrypy class StringMaker(object): @cherrypy.expose def index(self): return "Hello! How are you?" @cherrypy.expose def generate(self, length=9): return ''.join(random.sample(string.hexdigits, int(length))) if __name__ == '__main__': cherrypy.quickstart(StringMaker ())
Выполните шаги, приведенные ниже, чтобы получить вывод приведенного выше кода —
Шаг 1 — Сохраните вышеупомянутый файл как tutRoutes.py .
Шаг 2 — Посетите следующий URL —
http://localhost:8080/generate?length=10
Шаг 3 — Вы получите следующий вывод —