cherrypy._cp调度模块

CherryPy调度员。

“Dispatcher”是根据PATH_INFO、其他请求属性和应用程序体系结构查找“页面处理程序”可调用的对象,并收集当前请求的配置。内核尽可能早地调用调度程序,向其传递一个“path_info”参数。

默认调度程序通过将path_info与对象的分层排列(从request.app.root开始)进行匹配来发现页面处理程序。

class cherrypy._cpdispatch.Dispatcher(dispatch_method_name=None, translate={33: 95, 34: 95, 35: 95, 36: 95, 37: 95, 38: 95, 39: 95, 40: 95, 41: 95, 42: 95, 43: 95, 44: 95, 45: 95, 46: 95, 47: 95, 58: 95, 59: 95, 60: 95, 61: 95, 62: 95, 63: 95, 64: 95, 91: 95, 92: 95, 93: 95, 94: 95, 95: 95, 96: 95, 123: 95, 124: 95, 125: 95, 126: 95})[源代码]

基类:object

CherryPy Dispatcher,遍历对象树以查找处理程序。

树的根是cherrypy.request.app.root,PATH_INFO参数中的每个分层组件都与根对象的相应嵌套属性相匹配。匹配处理程序必须具有计算结果为True的“exposed”属性。特殊方法名“INDEX”匹配以劈开(“/”)结尾的URI。特殊方法名“default”可以匹配PATH_INFO的一部分(但仅当PATH_INFO的子字符串不再与某个其他对象匹配时)。

这是CherryPy的默认内置调度程序。

dispatch_method_name = '_cp_dispatch'

节点可以选择实现以提供其自己的动态调度算法的调度方法的名称。

find_handler(path)[源代码]

返回适当的页面处理程序,外加任何虚拟路径。

这将返回两个对象。第一个将是可调用的,可用于生成页面输出。查询字符串或请求正文中的任何参数都将作为关键字参数发送到该Callable。

通过遍历应用程序的树(从cherrypy.request.app.root开始)并将路径组件匹配到树中的后续对象,可以找到可调用的对象。例如,URL“/path/to/handler”可能返回root.path.to.handler。

返回的第二个对象将是“虚拟路径”组件的名称列表:URL的部分是动态的,在查找处理程序时没有使用。这些虚拟路径组件作为位置参数传递给处理程序。

class cherrypy._cpdispatch.LateParamPageHandler(callable, *args, **kwargs)[源代码]

基类:cherrypy._cpdispatch.PageHandler

在将cherrypy.request.params传递给页面处理程序时,我们不希望过早捕获该判据;我们希望让解码工具等工具有机会在处理程序的查找和实际调用之间修改params dict。这个子类考虑到了这一点,并允许request.params“延迟绑定”(要复杂得多,但效果就是这样)。

property kwargs

页面处理程序kwargs(复制了cherrypy.request.params)。

class cherrypy._cpdispatch.MethodDispatcher(dispatch_method_name=None, translate={33: 95, 34: 95, 35: 95, 36: 95, 37: 95, 38: 95, 39: 95, 40: 95, 41: 95, 42: 95, 43: 95, 44: 95, 45: 95, 46: 95, 47: 95, 58: 95, 59: 95, 60: 95, 61: 95, 62: 95, 63: 95, 64: 95, 91: 95, 92: 95, 93: 95, 94: 95, 95: 95, 96: 95, 123: 95, 124: 95, 125: 95, 126: 95})[源代码]

基类:cherrypy._cpdispatch.Dispatcher

基于cherrypy.request.method.upper()的附加派单。

将在公开的类上调用名为GET、POST等的方法。方法名必须全部大写;将输出适当的Allow标头,将所有大写的方法名显示为允许的HTTP谓词。

请注意,必须公开包含类,而不是方法。

class cherrypy._cpdispatch.PageHandler(callable, *args, **kwargs)[源代码]

基类:object

设置response.body的Callable。

property args

应该可以从派单后挂钩访问订购的ARG。

property kwargs

命名的kwarg应该可以从POST派单挂钩访问。

class cherrypy._cpdispatch.RoutesDispatcher(full_result=False, **mapper_options)[源代码]

基类:object

CherryPy基于路线的调度器。

connect(name, route, controller, **kwargs)[源代码]
find_handler(path_info)[源代码]

找到正确的页面处理程序,并设置request.config。

redirect(url)[源代码]
cherrypy._cpdispatch.VirtualHost(next_dispatcher=<cherrypy._cpdispatch.Dispatcher object>, use_x_forwarded_host=True, **domains)[源代码]

根据主机标头选择不同的处理程序。

当在一台CP服务器中运行多个站点时,这会很有用。它允许多个域指向单个网站结构的不同部分。例如::

http://www.domain.example  ->  root
http://www.domain2.example  ->  root/domain2/
http://www.domain2.example:443  ->  root/secure

可以通过以下配置完成:

[/]
request.dispatch = cherrypy.dispatch.VirtualHost(
    **{'www.domain2.example': '/domain2',
       'www.domain2.example:443': '/secure',
      })
next_dispatcher

调度链中的下一个调度程序对象。VirtualHost调度程序向URL添加前缀并调用另一个调度程序。默认为cherrypy.dispatch.Dispatcher()。

use_x_forwarded_host

如果为True(默认值),将使用任何“X-Forwarded-Host”请求标头而不是“Host”标头。这通常由HTTP服务器(如Apache)在代理时添加。

**domains

{主机标头值:虚拟前缀}对的字典。在此DICT中查找传入的“Host”请求头,如果找到匹配项,则在调用下一个分派器之前,相应的“虚拟前缀”值将优先于URL路径。请注意,“example.com”和“www.example.com”通常需要单独的条目。此外,“Host”报头可能包含端口号。

cherrypy._cpdispatch.XMLRPCDispatcher(next_dispatcher=<cherrypy._cpdispatch.Dispatcher object>)[源代码]
cherrypy._cpdispatch.getargspec(callable)[源代码]
cherrypy._cpdispatch.test_callable_spec(callable, callable_args, callable_kwargs)[源代码]

检查Callable并测试给定的参数是否适合它。

当在处理程序的调用阶段发生错误时,有两种错误情况:1.传递给函数的参数太多,该函数没有定义

其中之一 参数或 *Kwargs。

  1. 传递给函数的参数太少。

cherrypy处理程序有3个参数来源。1.查询字符串参数作为关键字参数传递给

操作员。

  1. 主体参数也作为关键字参数传递。

  2. 当发生部分匹配时,最终路径原子作为位置参数传递。

查询字符串和路径原子都是URI的一部分。如果它们不正确,则应引发404未找到。相反,主体参数是请求的一部分;如果它们无效,则返回400Bad请求。

cherrypy._cpdispatch.validate_translator(t)[源代码]