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/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 入门的更多相关文章
- cherrypy入门
主要是一个简单的cherrypy hello例子 import cherrypy from jinja2 import Environment, FileSystemLoader import os ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- Oracle分析函数入门
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
- Angular2入门系列教程4-服务
上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...
- wepack+sass+vue 入门教程(三)
十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...
- wepack+sass+vue 入门教程(二)
六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...
随机推荐
- java MAT 分析
java MAT 分析 http://blog.csdn.net/qeqeqe236/article/details/43577857 https://www.cnblogs.com/AloneSwo ...
- vim note(5)
.vimrc 的设置 $HOME/.vimrc 的普通设置,例如以下. set nocompatible "" not compatible with VI "" ...
- iOS开发——优化篇—— 25个性能优化/内存优化常用方法
1. 用ARC管理内存 ARC(Automatic ReferenceCounting, 自动引用计数)和iOS5一起发布,它避免了最常见的也就是经常是由于我们忘记释放内存所造成的内存泄露.它自动为你 ...
- 【LNOI 2014】 LCA
[题目链接] 点击打开链接 [算法] 考虑求lca(x,y)的深度 我们可以将从根到x路径上的点都打上标记,然后,询问y到根上路径的权值和 那么,求sigma(depth(lca(i,z)))(l & ...
- bzoj1407 [Noi2002]Savage——扩展欧几里得
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1407 看到一定有解,而且小于10^6,所以可以枚举: 判断一个解是否可行,就两两判断野人 i ...
- bzoj2594 [Wc2006]水管局长数据加强版——LCT
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2594 时间倒序一下,就是 魔法森林 那道题: 有个不解的地方,是 access 里面关于 p ...
- GCD中各种队列和任务执行方式的组合
一.概念回顾 1.GCD全称 Grand Central Dispatch ,是纯C语言,提供了非常多强大的函数,来进行系统线程的管理. 2.优势:GCD是苹果公司为多核的并行运算提出的解决方案.GC ...
- NestedPreb
屌丝手动版 One of the things we’re sorely missing from Unity is nested prefabs. So we rolled this little ...
- DotnetCore(1)尝鲜构建Web应用
在上篇文章中DotnetCore环境安装完成后,现在我们来尝试构建Web应用. 新建文件夹NetCoreWebDemo,并cd进入NetCoreWebDemo文件夹 同时Ctrl+shift按下快捷键 ...
- jQuery——表单应用(1)
实现结果:聚焦表单的input部分时,input格式变更为CSS样式(获取和失去焦点改变样式) HTML: <!DOCTYPE html> <html> <head> ...