В CherryPy встроенные инструменты предлагают единый интерфейс для вызова библиотеки CherryPy. Инструменты, определенные в CherryPy, могут быть реализованы следующими способами:
- Из настроек конфигурации
- Как декоратор Python или через специальный атрибут _cp_config обработчика страницы
- Как вызываемый Python, который может быть применен из любой функции
Базовый инструмент аутентификации
Целью этого инструмента является обеспечение базовой аутентификации для приложения, разработанного в приложении.
аргументы
Этот инструмент использует следующие аргументы —
название | По умолчанию | Описание |
---|---|---|
область | N / A | Строка, определяющая значение области. |
пользователи | N / A | Словарь в форме — имя пользователя: пароль или вызываемая функция Python, возвращающая такой словарь. |
шифровать | Никто | Вызываемый Python используется для шифрования пароля, возвращаемого клиентом, и сравнения его с зашифрованным паролем, предоставленным в словаре пользователей. |
пример
Давайте возьмем пример, чтобы понять, как это работает —
import sha import cherrypy class Root: @cherrypy.expose def index(self): return """ <html> <head></head> <body> <a href = "admin">Admin </a> </body> </html> """ class Admin: @cherrypy.expose def index(self): return "This is a private area" if __name__ == '__main__': def get_users(): # 'test': 'test' return {'test': 'b110ba61c4c0873d3101e10871082fbbfd3'} def encrypt_pwd(token): return sha.new(token).hexdigest() conf = {'/admin': {'tools.basic_auth.on': True, tools.basic_auth.realm': 'Website name', 'tools.basic_auth.users': get_users, 'tools.basic_auth.encrypt': encrypt_pwd}} root = Root() root.admin = Admin() cherrypy.quickstart(root, '/', config=conf)
Функция get_users возвращает жестко запрограммированный словарь, но также извлекает значения из базы данных или где-либо еще. Администратор класса включает эту функцию, которая использует встроенный в CherryPy инструмент аутентификации. Аутентификация зашифровывает пароль и идентификатор пользователя.
Базовый инструмент аутентификации не совсем безопасен, так как пароль может быть закодирован и расшифрован злоумышленником.
Инструмент кеширования
Цель этого инструмента — обеспечить кеширование памяти сгенерированного контента CherryPy.
аргументы
Этот инструмент использует следующие аргументы —
название | По умолчанию | Описание |
---|---|---|
invalid_methods | («POST», «PUT», «DELETE») | Кортежи строк HTTP-методов не должны кэшироваться. Эти методы также аннулируют (удаляют) любую кэшированную копию ресурса. |
cache_Class | MemoryCache | Объект класса, который будет использоваться для кэширования |
Инструмент декодирования
Цель этого инструмента — декодировать параметры входящего запроса.
аргументы
Этот инструмент использует следующие аргументы —
название | По умолчанию | Описание |
---|---|---|
кодирование | Никто | Он ищет заголовок типа контента |
default_encoding | «UTF-8» | Кодировка по умолчанию, которая будет использоваться, когда ничего не предоставлено или не найдено. |
пример
Давайте возьмем пример, чтобы понять, как это работает —
import cherrypy from cherrypy import tools class Root: @cherrypy.expose def index(self): return """ <html> <head></head> <body> <form action = "hello.html" method = "post"> <input type = "text" name = "name" value = "" /> <input type = ”submit” name = "submit"/> </form> </body> </html> """ @cherrypy.expose @tools.decode(encoding='ISO-88510-1') def hello(self, name): return "Hello %s" % (name, ) if __name__ == '__main__': cherrypy.quickstart(Root(), '/')
Приведенный выше код получает строку от пользователя и перенаправляет пользователя на страницу «hello.html», где она будет отображаться как «Hello» с указанным именем.
Вывод вышеуказанного кода выглядит следующим образом:
hello.html