cherrypy._cptools模块¶
CherryPy工具。“工具”是适用于CP的任何帮助器。
工具通常设计为以多种方式使用(尽管有些工具可能只提供一种方式,如果他们选择的话):
- 库调用
所有工具都是可调用的,可以在需要的任何地方使用。参数很简单,应该在文档字符串中详细说明。
- 函数装饰符
所有工具在被调用时都可以用作装饰器,用于配置单独的CherryPy页面处理程序(CherryPy树上的方法)。也就是说,“@tools.anytool()”应该通过修饰函数的_cp_config属性“打开”该工具。
- CherryPy配置
如果工具公开了一个“_setup”可调用对象,则每次请求都会调用它一次(如果通过config“打开”了该功能)。
工具可以实现为具有命名空间的任何对象。内置通常是Tools.Tool类的模块或实例。
- class cherrypy._cptools.HandlerTool(callable, name=None)[源代码]¶
-
称为“在Main之前”的工具,它可以跳过正常的处理程序。
如果工具成功处理请求(通过设置response.body),则IF应返回True。这将导致CherryPy跳过任何“普通”页面处理程序。如果该工具没有处理请求,它应该返回false,告诉CherryPy继续并调用正常的页面处理程序。如果该工具被声明为页面处理程序(请参阅“Handler”方法),则返回False将引发NotFound。
- class cherrypy._cptools.HandlerWrapperTool(newhandler, point='before_handler', name=None, priority=50)[源代码]¶
-
将request.handler包装在所提供的包装器函数中的工具。
‘newhandler’参数必须是接受‘NEXT_HANDLER’参数的处理程序包装函数
*args
和**kwargs
。与所有页面处理程序函数一样,它必须返回一个迭代数才能用作cherrypy.response.body。例如,要允许您的“内部”页面处理程序返回字典,然后将这些字典内插到模板中::
def interpolator(next_handler, *args, **kwargs): filename = cherrypy.request.config.get('template') cherrypy.response.template = env.get_template(filename) response_dict = next_handler(*args, **kwargs) return cherrypy.response.template.render(**response_dict) cherrypy.tools.jinja = HandlerWrapperTool(interpolator)
- class cherrypy._cptools.SessionTool[源代码]¶
-
CherryPy的会话工具。
- sessions.locking
当为“IMPLICIT”(默认值)时,会话将在运行页面处理程序之前为您锁定。
如果为“Early”,则在读取请求正文之前将锁定会话。出于安全原因,这在默认情况下是关闭的;例如,大型上载将对会话进行挡路操作,从而拒绝使用AJAX进度计时器 (issue )。
如果为‘EXPLICIT’(或任何其他值),则需要在使用会话数据之前自己调用cherrypy.session.quisition_lock()。
- class cherrypy._cptools.Tool(point, callable, name=None, priority=50)[源代码]¶
基类:
object
用于Cherrypy请求处理挂钩的注册函数。
帮助(tool.callable)应该提供有关此工具的更多信息。
- namespace = 'tools'¶
- property on¶
- class cherrypy._cptools.Toolbox(namespace)[源代码]¶
基类:
object
工具的集合。
此对象还充当其自身的配置命名空间处理程序。自定义工具箱应该添加到每个应用程序的工具箱字典中。
- class cherrypy._cptools.XMLRPCController[源代码]¶
基类:
object
XML-RPC的控制器(页面处理程序集合)。
要使用它,请让您的控制器子类该基类(它将为您打开该工具)。
您还可以提供以下可选配置条目:
tools.xmlrpc.encoding: 'utf-8' tools.xmlrpc.allow_none: 0
XML-RPC是HTTP上的一个相当不连续的层;必须首先根据URL执行向适当处理程序的分派,然后必须根据请求正文中指定的RPC方法执行第二个分派步骤。它还允许在URL中使用多余的“/RPC2”前缀,在正文中提供自己的处理程序参数,并且在找不到所需方法时需要200OK“错误”响应,而不是404。
因此,不能仅通过工具为CherryPy实现XML-RPC。该控制器充当前半部分的分派目标(基于URL);然后它从请求主体读取RPC方法,并基于该方法执行自己的第二个分派步骤。它还读取主体参数,并在出错时返回故障。
XMLRPCDispatcher去掉任何/RPC2前缀;如果您没有在URL中使用/RPC2,您可以安全地跳过打开XMLRPCDispatcher。否则,您需要在config::中使用声明
request.dispatch: cherrypy.dispatch.XMLRPCDispatcher()
- _cp_config = {'tools.xmlrpc.on': True}¶