- http://docs.cherrypy.org/dev/index.html
一.对象
在cherrypy中,似乎所有东西都是对象。
1. 官方的一个入门的例子:
例一.
- import cherrypy
-
-
class HelloWorld:
-
def index(self):
-
return "Hello world!"
-
index.exposed = True
-
-
cherrypy.quickstart(HelloWorld())
在上面的例子中,创建了一个HelloWorld类,类有一个方法index。在cherrypy中,方法名即是被访问的路径;即当访问时,会自动调用index()方法。方法的返回值即是输入到浏览器的内容。
类似于web服务器的index.html,当访问web服务器时,会自动把index.html发送回来。当不指定访问哪个方法时,cherrypy就会自动将对的访问定位到index上。
在类中,方法必须带有一个参数self。 当方法会定义之后,必须要使用.exposed = True或者在方法前申明@cherrypy.expose来表示此能够被浏览器访问到。
最后,把类的一个实例即对象传递给quickstart(),来启动服务器。
2.在对象中包含对象
例二.
- class OnePage(object):
-
def index(self):
-
return "one page!"
-
index.exposed = True
-
-
class HelloWorld(object):
-
onepage = OnePage()
-
-
def index(self):
-
return "hello world"
-
index.exposed = True
-
root = HelloWorld()
-
cherrypy.quickstart(root)
这样就可以访问
即访问的是root.onepage.index()方法.
二.函数
也可以直接定义函数,但是得让函数成为实例的成员。
- import cherrypy
-
-
class HelloWorld:
-
def index(self):
-
return "Hello world!"
-
index.exposed = True
-
-
root = HelloWorld()
-
-
def foo():
-
return 'Foo!'
-
foo.exposed = True
-
-
root.foo = foo
-
cherrypy.quickstart(root)
注意,在外部定义的函数和类里定义的方法不一样,后者带有一个表示类自身的参数self,而前者不带。三.多层路径
当有如 类似的url时cherrypy如何处理?
- import cherrypy
-
-
class HelloWorld:
-
def index(self):
-
return "Hello world!"
-
index.exposed = True
-
-
root = HelloWorld()
-
-
def foo(year, month, day):
-
return '{}-{}-{}'.format(year, month, day)
-
foo.exposed = True
-
-
root.foo = foo
-
cherrypy.quickstart(root)
当访问foo/2008/12/11时,会输出2008-12-11.
另一个例子:
- import cherrypy
-
-
class HelloWorld:
-
def index(self):
-
return "Hello world!"
-
index.exposed = True
-
-
root = HelloWorld()
-
-
class Blog:
-
def default(self, year, month, day):
-
return '{}-{}-{}'.format(year, month, day)
-
default.exposed = True
- def another(self, year, month, day):
-
return '{}-{}-{}'.format(year, month, day)
-
another.exposed = True
-
root.blog = Blog()
-
-
root.foo = foo
-
cherrypy.quickstart(root)
当访问blog/2008/12/11 或者blog/another/2008/12/11 时会出现与上例一样的结果。注意此例中的default方法,和index()有类似的行为。当不给出具体要执行的方法时,若参数个数匹配,则就会执行default()方法。
注意:多层路径也可以使用二所说的方法,即:对象.对象...方法
四.表单的数据
对如下表单:
- <form action="doLogin" method="post">
-
<p>Username</p>
-
<input type="text" name="username" value=""
-
size="15" maxlength="40"/>
-
<p>Password</p>
-
<input type="password" name="password" value=""
-
size="10" maxlength="40"/>
-
<p><input type="submit" value="Login"/></p>
-
<p><input type="reset" value="Clear"/></p>
-
</form>
要获取表单中的数据,则:
- import cherrypy
-
-
class HelloWorld:
-
def index(self):
-
return "Hello world!"
-
index.exposed = True
-
@cherrypy.expose
-
def doLogin(self, username = None, password = None):
-
return '{}-{}'.format(username, password)
-
cherrypy.quickstart(HelloWorld())
如果表单中有超过2个条目的数据,则会出错,这时可以修改下doLogin的参数,使它能够忽略多余的参数:
- def doLogin(self, username = None, password = None, **oth):
或者直接:
- def doLogin(self, **form):
-
return '{}{}'.format(form['username'], form['password'])
方法doLogin其实与方法default表现的行为一致,只是用的地方不一样。所以在default中不能使用字典参数。
阅读(6730) | 评论(0) | 转发(0) |