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/dddd和http://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())

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

  • 如果请求为http://localhost:8080。直接对应到Man类的index方法,所以输出是:"i’m man”。
  • 如果请求为http://localhost:8080/sayhello。对应到Man类的sayhello方法,所以输出是:"hello,i’m man”。
  • 如果请求为http://localhost:8080/wife。对应到Man类的wife变量,因此对应到Wife类的index方法,输出是:"i’m wife”。
  • 如果请求为http://localhost:8080/wife/sayhello。对应到Man类的wife变量的sayhello方法,输出是:"hello,i’m wife”。
  • brother和wife类似。

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服务启动时就会使用指定的配置文件。

http://www.cnblogs.com/JeffreySun/archive/2009/12/24/1631431.html

CherryPy 入门相关推荐

  1. cherrypy 入门笔记(1) hello world

    cherrypy 是一个小型web框架,可以用来做一点小型玩具程序.最近闲的无聊,拿来学习一下. hello world 应用 hello.py: import cherrypyimport os.p ...

  2. 中文版Google App Engine入门指南

    转自http://lampeter123.iteye.com/blog/390536 使用webapp框架 CGI标准是很简单的,但是要把所有的代码一一写出来还是很繁重的.WEB app框架帮你解决了 ...

  3. 【微信公众号】微信公众号开发——Werobot入门指南

    本文目录 文章目录 Werobot简介 申请公众号 获取开发者ID 服务器部署 验证服务器有效性 实验效果 补充 Werobot简介 Werobot项目地址(作者:whtsky):链接 WeRoBot ...

  4. 用Construct 2制作入门小游戏~

    今天在软导课上了解到了Construct 2这个神器,本零基础菜鸟决定尝试做一个简单的小游戏(实际上是入门的教程啊= = 首先呢,肯定是到官网下载软件啊,点击我下载~ 等安装完毕后我便按照新手教程开始 ...

  5. Docker入门六部曲——Swarm

    原文链接:http://www.dubby.cn/detail.html?id=8738 准备工作 安装Docker(版本最低1.13). 安装好Docker Compose,上一篇文章介绍过的. 安 ...

  6. Docker入门六部曲——Stack

    原文链接:http://www.dubby.cn/detail.html?id=8739 准备知识 安装Docker(版本最低1.13). 阅读完Docker入门六部曲--Swarm,并且完成其中介绍 ...

  7. Docker入门六部曲——服务

    原文链接:http://www.dubby.cn/detail.html?id=8735 准备 已经安装好Docker 1.13或者以上的版本. 安装好Docker Compose.如果你是用的是Do ...

  8. 【springboot】入门

    简介: springBoot是spring团队为了整合spring全家桶中的系列框架做研究出来的一个轻量级框架.随着spring4.0推出而推出,springBoot可以説是J2SEE的一站式解决方案 ...

  9. SpringBoot (一) :入门篇 Hello World

    什么是SpringBoot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不 ...

  10. 入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集-深度学习问题

    入门指南目录页 -PaddlePaddle 飞桨 入门指南 FAQ合集 GT_Zhang关注 0.1012019.08.01 18:43:34字数 1,874阅读 795 Hi,欢迎各位来自Paddl ...

最新文章

  1. 《未来简史》五、你我正处在一列没有刹车的快车上,狂奔成“神”
  2. asp.net使用httphandler打包多CSS或JS文件以加快页面加载速度
  3. oracle 自定义函数
  4. Linux服务器开发之:stat(),fstat(),lstat()详细介绍+案例演示
  5. Linux Buffers和Cached的区别(转)
  6. Redis详解(五)——Redis多实例
  7. python之web编程
  8. html mysql留言板_【网页留言板制作】HTML + CSS + PHP + MySQL 实战
  9. SpringBoot整合freemarker模板导出word文件
  10. [转载]用 Apache Geronimo 创建并部署 blog 和 wiki 模块
  11. SharePoint 2016 Search 定制开发简介系列七-Search Database with Security Trimming
  12. canal deployer+canal adapter自动同步MySQL数据到ElasticSearch
  13. sht30使用心得自述
  14. 云原生系列 六【轻松入门容器基础操作】
  15. 常见的BeanUtils.populate异常 解决方案
  16. 国内外知名源码商城系统盘点
  17. java全栈系列之JavaSE-面向对象(instanceof关键字与类型转换)039
  18. Android 逆向笔记 —— 一个简单 CrackMe 的逆向总结
  19. [Unity] 关于Unity Mirror的一点体会
  20. Maxwell 的使用

热门文章

  1. [Scottgu]ASP.NET vNext系列——数据选择
  2. 数据库-如何快速创建连接字符串
  3. python高级编程教程_python高级编程——入门语法(一)
  4. PHP 调用阿里云短信服务API操作短信模板(增删改查)
  5. IntelliJ IDEA+Maven运行apache-storm的LocalCluster例子
  6. PHP中的ZIP压缩与解压
  7. OpenJDK8已经将近3个月没修改了
  8. maven指定JDK
  9. SVN统计一段时间的日志
  10. relocation R_X86_64_PC32 against symbol lua_newstate can not be used when making a shared object