美文网首页
CherryPy框架分析与基础

CherryPy框架分析与基础

作者: 狐仙大人_ | 来源:发表于2018-10-10 11:08 被阅读0次

    应用实例

    hello.py

    import cherrypy 
    
    class Root(object):
        @cherrypy.expose
        def index(self):
            return "Hello World!"
     
    if __name__ == '__name__':
        cherrypy.quickstart(Root(), '/')
    

      正如cherrypy.quickstart(Root(),'/')是在“/”枯井上启动内置的HTTP服务器服务。
      正如@cherrypy.expose()是将该方法暴露,使得其能被Cherry调用。
      CherryPy是一个专注于单一任务的小框架;接受HTTP请求,并找到与请求URL匹配的Python函数或者方法。
      Cherry不提供对数据库访问,HTML模板或任何其他中间件功能的内置支持。

    CherryPy框架

       支撑运行Hello World的CherryPy的框架大致如下图所示,图中的节点名称是CherryPy中的类名。


    CherryPy框架.png

       当一个请求发生时,首先到达的是CPWSGIServer,CPWSGIServer基于socket,win32下对应的底层支持module是process/win32.py。由于CherryPy支持WSGI接口的应用,故CPWSGIServer也能支撑WSGI应用。

       CPWSGIServer会将每个请求封装成一个HTTPConnection,然后扔到队列Queue里面,由ThreadPool中的WorkerThread来处理,处理方式很简单,就是ThreadPool启动多个WorkerThread,每个WorkerThread去Queue中取HTTPConnection,然后处理之。CherryPy中,可以设置WorkerThread的个数。 \color{red}{(也就是说我们可以修改WorkerThread的个数,自定义同时处理多条HTTP请求的指令)}

      ThreadPool模块和_cp开头的module的交互是通过_cpserver.Server,它只是一个Adapter,包装了底层的Server类。HTTPConnection会将消息转发到_cptree.Tree,该类中记载了站点的相对路径(比如“/”)和对应的Application之间的对应关系,那么它会跟据不同的URL请求转到对应的Application中。

      Application中则封装了用户定义的类HelloWorld对象,故在需要返回数据给客户端时,调用到HelloWorld中。

    单一应用

      最直接的方法是使用cherrypy.quickstart()功能。他需要至少一个参数,即应用程序的实例。另外还有两个可选参数。
      第一个是应用程序可以访问的基本路径。第二个是一个配置字典或文件用来配置所托管的应用程序。

    cherrpy.quickstart(Blog())  
    cherrpy.quickstart(Blog(), '/blog')  
    cherrpy.quickstart(Blog(), '/blog', {'/': {'tools.gzip.on': True}})
    

      第一个例子意味着你的应用程序将在http://hostname:port/ 下可用, 而另外两个将使你的应用程序可在http://hostname:port/blog 上使用。
      第三种情况下,设置相对于应用程序,而不是在哪里可用, 所以是{'/': ...} 而不是{'/blog': ...}
      cherrypy.quickstart()方法对于单个应用程序是好用的,但是缺乏使用服务器托管多个应用程序的能力。

    多应用程序

      要实现托管多应用程序的能力,需要使用cherrypy.tree.mount 功能:

    cherrypy.tree.mount(Blog(), '/blog', blog_conf)
    cherrypy.tree.mount(Forum(), '/forum', forum_conf)
    cherrypy.engine.start()
    cherrypy.engine.block()
    
    

      本质上, cherrypy.tree.mount 使用和cherrypy.quickstart 相同的参数: 应用程序实例, 托管路径, 配置字典。 最后两行只是启动服务器。
      除此之外Cherrypy还可以托管外部WSGI应用程序。

      

    相关文章

      网友评论

          本文标题:CherryPy框架分析与基础

          本文链接:https://www.haomeiwen.com/subject/okxpaftx.html