Toggle line numbers
1 # -*- coding: gbk -*-
2 """
3 Tutorial 04 - 多媒对象
4
5 本教程展示如何组织一个完整的站点,通过不同对象的继承关系
6 """
7 from cherrypy import cpg
8 # 自个儿加的,为了尝试外部文件的引入
9 import os,sys
10
11 class HomePage:
12 def __init__(self):
13 # 嗯嗯!初始化中,读入一个有表单的HTML
14 self.login = open("login.html","r").read()
15 def index(self):
16 return '''
17 <p>Hi, this is the home page! Check out the other
18 fun stuff on this site:</p>
19
20 <ul>
21 <li><a href="/joke/">A silly joke</a></li>
22 <li><a href="/links/">Useful links</a></li>
23 </ul>
24 <hr/>
25 %s
26 '''%self.login
27 # 直接包含在首页并输出
28 index.exposed = True
29
30 def doLogin(self, username=None, password=None):
31 # 照抄教程中的处理函式
32 return '''用户:%s
33 <br/>
34 口令:%s
35 '''%(username,password)
36 doLogin.exposed = True
37
38 class JokePage:
39 def index(self):
40 return '''
41 <p>"In Python, how do you create a string of random
42 characters?" -- "Read a Perl file!"</p>
43 <p>[<a href="../">Return</a>]</p>
44 '''
45 index.exposed = True
46
47
48 class LinksPage:
49 """每个对象可以处理嵌套的对象请求
50 - 最简单的方式是在各自的 __init__ 函式中声明
51 """
52 def __init__(self):
53 self.extra = ExtraLinksPage()
54
55 def index(self):
56 """我们可以随意指向外部链接,对象并不会在意链接是否在站内
57 """
58 return '''
59 <p>Here are some useful links:</p>
60
61 <ul>
62 <li><a href="http://www.cherrypy.org">The CherryPy Homepage</a></li>
63 <li><a href="http://www.python.org">The Python Homepage</a></li>
64 </ul>
65
66 <p>You can check out some extra useful
67 links <a href="./extra/">here</a>.</p>
68
69 <p>[<a href="../">Return</a>]</p>
70 '''
71
72 index.exposed = True
73
74
75 class ExtraLinksPage:
76 def index(self):
77 # 注意相对路径可以安全的被识别处理
78 return '''
79 <p>Here are some extra useful links:</p>
80
81 <ul>
82 <li><a href="http://del.icio.us">del.icio.us</a></li>
83 <li><a href="http://www.mornography.de">Hendrik's weblog</a></li>
84 </ul>
85
86 <p>[<a href="../">Return to links page</a>]</p>
87 '''
88
89 index.exposed = True
90
91
92 # Of course we can also mount request handler objects right here!
93 # 当然我们可以集中的在此声明所有发布对象
94 cpg.root = HomePage()
95 cpg.root.joke = JokePage()
96 cpg.root.links = LinksPage()
97
98 # 注意,你不必在此装载 ExtraLinksPage 因为 LinksPage并不在此初始化
99 # 实际上,你没有理由要在 根对象中关心下层对象的解析
100 # 所有的处理,会在URL请求时自动进行的!
101
102 cpg.server.start(configFile = 'tutorial.conf')