CherryPy - 工具箱
在 CherryPy 中,内置工具提供了一个调用 CherryPy 库的接口。CherryPy 中定义的工具可以通过以下方式实现 -
- 从配置设置
- 作为 Python 装饰器或通过页面处理程序的特殊 _cp_config 属性
- 作为可从任何函数内应用的 Python 可调用对象
基本认证工具
该工具的目的是为应用程序中设计的应用程序提供基本的身份验证。
论点
该工具使用以下参数 -
姓名 | 默认 | 描述 |
---|---|---|
领域 | 不适用 | 定义领域值的字符串。 |
用户 | 不适用 | 形式的字典 - 用户名:密码或返回此类字典的 Python 可调用函数。 |
加密 | 没有任何 | Python callable 用于对客户端返回的密码进行加密,并将其与用户字典中提供的加密密码进行比较。 |
例子
让我们举个例子来理解它是如何工作的 -
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函数返回一个硬编码字典,但也从数据库或其他任何地方获取值。类 admin 包含此功能,它利用 CherryPy 的内置身份验证工具。身份验证对密码和用户 ID 进行加密。
基本的身份验证工具并不真正安全,因为入侵者可以对密码进行编码和解码。
缓存工具
该工具的目的是为 CherryPy 生成的内容提供内存缓存。
论点
该工具使用以下参数 -
姓名 | 默认 | 描述 |
---|---|---|
无效方法 | (“发布”、“放置”、“删除”) | 不缓存的 HTTP 方法字符串元组。这些方法还会使资源的任何缓存副本失效(删除)。 |
缓存类 | 内存缓存 | 用于缓存的类对象 |
解码工具
该工具的目的是解码传入的请求参数。
论点
该工具使用以下参数 -
姓名 | 默认 | 描述 |
---|---|---|
编码 | 没有任何 | 它查找内容类型标头 |
默认编码 | “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