• CherryPy 入门


    CherryPy是一个Python的HTTP框架,可以用Python来处理HTTP请求然后返回结果。

    1. 安装

    可以去这个地址下载 CherryPy-3.1.2.win32.exe 。或者去这个链接去找不同的版本http://www.cherrypy.org/wiki/CherryPyDownload 。下载好后直接点击安装,安装好后,CheryyPy相关的模块会被放到 {Python 安装目录}\Lib\site-packages 下面。

    2. Hello World

    先新建一个HelloWorld.py文件,这里我们直接把文件保存到C盘下C:\HelloWorld.py。代码如下:

       1: import cherrypy
       2:  
       3: class HelloWorld:
       4:     @cherrypy.expose
       5:     def hello(self):
       6:         return "Hello World!"
       7:  
       8: cherrypy.quickstart(HelloWorld())

    代码后面我一行一行来解释,先在命令行下直接执行这个文件:

    C:\>Python HelloWorld.py

    我这里是已经把自己的Python.exe所在的目录配置到了环境变量里面,所以不用指定完整的路径。如果没有配置环境变量,如果您的Python安装在C:盘下,上面的命令的内容应该类似于这样:

    C:\>C:\Python26\Python.exe C:\HelloWorld.py

    执行完上面的命令,会出现类似如下的提示信息:

    C:\>python HelloWolrd.py
    [24/Dec/2009:11:23:55] ENGINE Listening for SIGTERM.
    [24/Dec/2009:11:23:55] ENGINE Bus STARTING
    CherryPy Checker:
    The Application mounted at '' has an empty config.

    [24/Dec/2009:11:23:55] ENGINE Started monitor thread '_TimeoutMonitor'.
    [24/Dec/2009:11:23:55] ENGINE Started monitor thread 'Autoreloader'.
    [24/Dec/2009:11:23:56] ENGINE Serving on 127.0.0.1:8080
    [24/Dec/2009:11:23:56] ENGINE Bus STARTED

    这个时候CherryPy自带的Web服务已经启动了,提示信息已经指出了,默认的端口是8080。可以通过浏览器输入地址 http://localhost:8080/hello 进行访问。浏览器的输出为“Hello World!”

    逐行解释下代码:

    • 第1行,这个是必须的,导入CherryPy的主模块。
    • 第4行,HelloWorld类中有一个hello方法,hello这个方法名会对应到请求的URL中的内容。http://localhost:8080/hello 会导致调用hello方法。这些要被调用的方法需要让它被发布出来,可以通过给一个@cherrypy.expose标记,或者直接hello.expose = True进行设置也可以,下面的代码和HelloWorld.py中的代码等同:
         1: import cherrypy
         2:  
         3: class HelloWorld:
         4:     def hello(self):
         5:         return "Hello World"
         6:  
         7:     hello.exposed = True
         8:  
         9: cherrypy.quickstart(HelloWorld())
      如果不设置@cherrypy.expose或hello.expose = True的话,那么该方法则不能用来响应请求。
    • 第6行,return的字符串直接返回到客户端做为请求的结果。
    • 第8行,发布一个HelloWorld的实例,并启动内置的Web服务器。

    3. Demo

    3.1 demo1

       1: import cherrypy
       2:  
       3: class HelloWorld:
       4:     @cherrypy.expose
       5:     def hello(self):
       6:         return "hello"
       7:  
       8:     def index(self):
       9:         return "Hello world!"
      10:     index.exposed = True
      11:  
      12: cherrypy.quickstart(HelloWorld())

    这里有一个hello和index方法,hello方法对应的URL是http://localhost:8080/hello。index方法对应的URL是http://localhost:8080/index,但是index这个方法也对应到http://localhost:8080这个地址,相当于一个默认的方法,类似于IIS中设置的index.html、default.html等页面。

    3.2demo2

       1: import cherrypy
       2:  
       3: class HelloWorld:
       4:     @cherrypy.expose
       5:     def hello(self,firstname,lastname):
       6:         return "i love you"+" : "+firstname+lastname
       7:  
       8:     @cherrypy.expose
       9:     def default(self, year, month, day,aa):
      10:         return "error";
      11: cherrypy.quickstart(HelloWorld())
    • hello方法,注意后面的firstname和lastname两个参数,这个两个参数对应到浏览器的参数。这个hello方法对应到http://localhost:8080/hello/Jeffery/Sun或者http://localhost:8080/hello?firstname=Jeffery&lastname=Sun。注意,当把参数直接作为地址的一部分传递时(第一个URL),CherryPy会根据 “/”分开URL赋值给方法参数。但是如果用浏览器参数形式传递(第二个URL),浏览器参数名称必须能和方法参数名对应上。
    • default方法,default方法有特殊的含义,它本身除了一般的方法的意思之外,还用于匹配与它参数个数一致的请求,一般可以用来作为非法URL的错误处理。上面的default方法可以对应到这个URL:http://localhost:8080/default/2007/10/20/lijianwei,参数year对应到2007,month对应到10,day对应到20,aa对应到lijianwei。但是它也对应到如下的几个URL:http://localhost:8080/aaa/bbb/ccc/ddddhttp://localhost:8080/111/222/333/444等,也就是说虽然这两个URL对应不到任何的一个Python的方法,但是由于分开后的参数个数能与default方法对应上,所以还是会匹配到default方法,这就是default方法的一个特殊作用。一个正常的请求到达后,首先进行正常的匹配,看能否找到一个合适的方法,如果没有,那么就会去和default匹配,看参数个数是否一样,如果还是不匹配就会抛出404错误。

    3.3demo3

       1: import cherrypy
       2:  
       3: class Wife:
       4:     @cherrypy.expose
       5:     def index(self):
       6:         return "i'm wife"
       7:  
       8:     @cherrypy.expose
       9:     def sayhello(self):
      10:         return "hello,i'm wife"
      11:  
      12: class Brother:
      13:     @cherrypy.expose
      14:     def index(self):
      15:         return "i'm brother"
      16:  
      17:     @cherrypy.expose
      18:     def sayhello(self):
      19:         return "hello,i'm brother"
      20:  
      21: class Man:
      22:     wife = Wife()
      23:     brother = Brother()
      24:  
      25:     @cherrypy.expose
      26:     def index(self):
      27:         return "i'm man"
      28:  
      29:     @cherrypy.expose
      30:     def sayhello(self):
      31:         return "hello,i'm man"
      32:  
      33: cherrypy.quickstart(Man())

    这里主要是演示一个类如何使用其它的类来响应请求:

    4. 配置

    前面注意到,默认的Web服务启动的时候,使用的是默认的8080端口,这个端口可以在配置文件中进行配置,我的Python安装目录为C:\Python26,CherryPy配置文件的路径如下:C:\Python26\Lib\site-packages\CherryPy-3.1.2-py2.6-win32.egg\cherrypy\scaffold\site.conf ,默认使用的就是这个配置文件。

    我们也可以自己重新写一个新的配置文件,在quickstart的第二个参数中指定这个配置文件的路径,Web服务启动时就会使用指定的配置文件。

  • 相关阅读:
    洛谷P4206 [NOI2005]聪聪与可可(期望dp+最短路)
    bzoj2064: 分裂(状压dp)
    Centos7搭建ansible运维自动化工具
    Centos7自动式脚本搭建jumpserver
    TSP问题—Hopfield神经网络算法
    TSP问题—近似算法
    狭义相对论的数学推导
    线性规划实战—投资的收益和风险
    线性规划的算法分析
    一阶非齐次线性微分方程的算法
  • 原文地址:https://www.cnblogs.com/JeffreySun/p/1631431.html
Copyright © 2020-2023  润新知