1 # -*- coding: gbk -*-
   2 """
   3 Tutorial 07 - 默许函式
   4 
   5 请求句柄对象可以包含一个"default"默许函式,如果没有适当爱厂如家函式或是对象匹配就自动运行之.
   6 
   7 实际上, 如果 CherryPy2 不能找到与URL 请求相匹配的对象或是函式,就会自动调用当前深度上的
   8 默许函式.
   9 
  10 利用这种机制,你可以轻易的模拟URL请求响应
  11 而且可以通过
  12 cpg.request.virtualPath 来访问.
  13 
  14 本教程的应用情景是类似
  15 /users/<username>.
  16 这个<username>字节如果没有匹配的函式, 则会由默许函式获得句柄
  17 """
  18 
  19 from cherrypy import cpg
  20 
  21 class UsersPage:
  22     def index(self):
  23         """ 既然是个很傻的简单示范,我们就显示一个用户列表
  24             - 在实际应用中,列表可以从数据的查询结果中生成
  25         """
  26         return '''
  27             <a href="./remi">Remi Delon</a><br/>
  28             <a href="./hendrik">Hendrik Mans</a><br/>
  29             <a href="./lorenzo">Lorenzo Lamas</a><br/>
  30             <a href="./周琦">周 琦</a><br/>
  31         '''
  32 
  33     index.exposed = True
  34 
  35 
  36     def default(self, user):
  37         """这里我们处理虚拟请求
  38             - 没有对应的处理函式
  39             - 实际应用中,可以使用数据的查询验证来代替这里的 if/elif/else
  40         """
  41         if user == 'remi':
  42             out = "Remi Delon, CherryPy lead developer"
  43         elif user == 'hendrik':
  44             out = "Hendrik Mans, CherryPy co-developer & crazy German"
  45         elif user == 'lorenzo':
  46             out = "Lorenzo Lamas, famous actor and singer!"
  47         elif user == '周琦':
  48             out = " 是也乎是也乎!!"
  49             # 中文不行!
  50         else:
  51             out = "Unknown user. :-("
  52 
  53         return '%s (<a href="./">back</a>)' % out
  54 
  55     default.exposed = True
  56 
  57 
  58 cpg.root = UsersPage()
  59 
  60 cpg.server.start(configFile = 'tutorial.conf')