ZoomQuiet avatar ZoomQuiet committed 55e3c78

reviewed ch05

Comments (0)

Files changed (16)

 .. _PythonWeb框架: http://wiki.woodpecker.org.cn/moin/PyWebFrameList
 
 .. _Bottle: http://bottlepy.org
-
 .. _WSGI: http://docs.python.org/library/wsgiref.html
 
-.. _官方图书许可: http://web2py.com/book/default/section/0/0
-.. _Artistic License 2.0: http://www.opensource.org/licenses/artistic-license-2.0.php
-.. _reSTsections: http://sphinx.pocoo.org/rest.html#sections
+.. _Mako: http://www.makotemplates.org/
+.. _Jinja2: http://jinja.pocoo.org/
+.. _Cheetah: http://www.cheetahtemplate.org/
+
+
+.. _w3school: http://www.w3school.com.cn/
+.. _CSS: http://www.w3school.com.cn/css/index.asp
+
+.. _Leo: http://wiki.woodpecker.org.cn/moin/LeoEnvironment
+.. _VirtualBox: https://www.virtualbox.org/
+.. _PuTTY: http://www.chiark.greenend.org.uk/~sgtatham/putty/
 
 .. 图片链接收集~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 .. 成员相关链接~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 .. _Zoom.Quiet: http://code.google.com/p/openbookproject/wiki/ZoomQuiet
 .. _大妈: http://zoomquiet.org
-
+.. _行者: http://wiki.woodpecker.org.cn/moin/WoodpeckerHackers
 
 .. OBP相关链接~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 .. _OBP工程: http://code.google.com/p/openbookproject
 .. _OBP流程: http://code.google.com/p/openbookproject/wiki/FlowSphinx
 .. _OBP参与: http://code.google.com/p/openbookproject/wiki/HowtoJoin
 .. _基于Sphinx的图书协同 : http://code.google.com/p/openbookproject/wiki/FlowSphinx
+.. _官方图书许可: http://web2py.com/book/default/section/0/0
+.. _Artistic License 2.0: http://www.opensource.org/licenses/artistic-license-2.0.php
+.. _reSTsections: http://sphinx.pocoo.org/rest.html#sections
 
 
 
Add a comment to this file

source/_static/figs/ch05-web2-0.png

Added
New image
Add a comment to this file

source/_static/figs/ch05-web2-1.png

Added
New image
Add a comment to this file

source/_static/figs/ch05-web2-2.png

Added
New image
Add a comment to this file

source/_static/snap/malaweb_leo.png

Old
Old image
New
New image

source/ch05/HTMLandCss.rst

+.. include:: ../LINKS.rst
+
+
 HTML与CSS
 =============================
 
+这模板是怎么回事?看不懂啊……………………
+
 本章将对HTML进行简单的介绍
 
-想深入学习的可以到w3cschool学习
 
-.. http://www.w3school.com.cn/
-
-这模板是怎么回事?看不懂啊……………………
 
 HTML
 ------------------------------
 
 什么是 HTML?
 
- - HTML 是用来描述网页的一种语言。
+- HTML 是用来描述网页的一种语言。
+- HTML 指的是超文本标记语言 
+- HTML 不是一种编程语言,而是一种标记语言 
+- 标记语言是一套标记标签
+- HTML 使用标记标签来描述网页
+ 
+嗯嗯嗯,看着就头大,还是从实例来分析吧。
 
- - HTML 指的是超文本标记语言 
-
- - HTML 不是一种编程语言,而是一种标记语言 
-
- - 标记语言是一套标记标签
-
- - HTML 使用标记标签来描述网页
- 
-靠,看着就头大,还是从实例来分析吧。
-
-* 编程这玩意儿,实践出真知的 
+- 编程这玩意儿,实践出真知的 
 
 ::
 
-  <html>
-  
-  <body>
-  
-  <h1>Hello,world</h1>
-  
-  <p>Python</p>
-  
-  </body>
-  
-  </html>
+    <html>
+    <body>
+      <h1>Hello,world</h1>
+      <p>Python</p>
+    </body>
+    </html>
 
 保存为test.html,不用编译,不用解释器,点开就看到了!
 
 
 HTML就是由标签组成的。
 
-用<>括起来的就是标签。
+用 `<>` 括起来的就是标签。
 
-标签通常成对出现的,<xxxx></xxxx>::
+标签通常成对出现的,`<xxxx>` 和 `</xxxx>` ::
 
-  <p></p>
-  
+    <p></p> 
+
+
 中间的就是内容。
 
-<html>把网页括起来
-
-<body>把中间括起来
-
-<h1>把1号标题括起来
-
-<p>把段落括起来
+- `<html>` 把网页括起来
+- `<body>` 把网页内容括起来
+- `<h1>` 把1号标题括起来
+- `<p>` 把段落括起来
 
 但是,更复杂一点的呢?
 
-css
+想深入学习的可以到 `w3school`_ 学习
+
+
+CSS
 ------------------------------
 
-css乃是样式表也。如果一种样式在网页中反复出现,那么,有没有办法写成一个function?
+`CSS`_,乃是层叠样式表(英语:Cascading Style Sheets,简写CSS)
+
+如果一种样式在网页中反复出现,那么,有没有办法写成一个function?
 
 有办法的!HTML中的函数,CSS!
 
 写css,需要在title标签内加入代码::
 
-  <style type="text/css">
+    <style type="text/css">
+      p {font-size: 10pt}
+    </style>
 
-  p {font-size: 10pt}
-
-  </style>
 
 .. image:: ../_static/snap/10pt.png
 
 
   #text{font-size: 9pt}
   
+
 定义一个叫做text的样式,字体大小为9pt。
 
 但是打开网页没反应阿!怎么调用阿?
 
 .. image:: ../_static/snap/9pt_error.png
 
+
 在body加入::
 
-  <p id="text">
-  
-  Pythonic!
-  
-  </p>
-  
+    <p id="text">
+      Pythonic!
+    </p>
+
+
 再运行一下,耶!有反应了
 
 .. image:: ../_static/snap/9pt.png
 
+
 相关链接
 -------------------------------
 
 小白觉得还不过瘾,又找到了很多html有关资料
 
- - http://www.w3school.com.cn/    w3school一套很好的网页制作教材
- 
- - http://kanrs.com/  張教主的网页制作教程,还附带wsgi写网站的教程哦!
+- http://www.w3school.com.cn/    w3school一套很好的网页制作教材
+- http://kanrs.com/  張教主的网页制作教程,还附带wsgi写网站的教程哦!
+

source/ch05/Human.rst

+.. include:: ../LINKS.rst
+
 人性化
 ============================
 
 结果都变成纯文本传出来了……没有得到换行符的结果。怎么能够让模板传入HTML代码,使模板功能更将大呢?
 小白在网上搜索了一下“python 模板”,搜出一大堆结果。小白发现Python有以下许多模板:
 
-  *mako
+- `Mako`_
+- `Jinja2`_
+- `Cheetah`_
+- 等等....
   
-  *jinja
-  
-  *Cheetah
-  
-小白继续看,发现小而强大的模板系统就是——mako。“嗯!试试mako吧。先下把mako安装了再说。”
+小白继续看,发现小而强大的模板系统就是—— `Mako`_ 。“嗯!试试mako吧。先下把mako安装了再说。”
 
 安装::
 
-  sudo easy_install mako
+    sudo easy_install mako
   
-安装成功!
 
 
 改进模板
 
 Leo
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+::
 
-夫Leo 者,文化式编程之工具也!
 
-在工具篇里有具体介绍
+  夫 `Leo`_ 者,文学编程 之环境也!
+
+在工具篇里有具体介绍, 也是听从 `行者`_ 建议,上了瘾的奇妙工具...
 
 用clone节点来记录css,方便了许多,减少重复。
 
 
 ::
 
-  <style type="text/css">
+    <style type="text/css">
 
-  h1{
-  
-  color : grey; 
-  
-  font-size : 27px;
-  
-  }
-  
-  a{
-  
-  color : clack;
-  
-  font-size : 10pt;
-  
-  }
-  </style>
+    h1{
+      color : grey; 
+      font-size : 27px;
+    }
+    a{
+      color : clack;
+      font-size : 10pt;
+    }
+    </style>
   
 再连同title等标签和导航栏写成一个head节点,clone到每一个页面::
 
-  # -*- coding: utf-8 -*-
-  <html>
-  <head>
-  <title>mala通讯录</title>
-  <style type="text/css">
-  h1{
-  color : grey; 
-  font-size : 27px;
-  }
-  a{
-  color : clack;
-  font-size : 10pt; 
-  }
-  </style>
-  </head>
-  <body>
-  <h1>通讯录程序</h1>
-  <br />
-  <hr />
-  <a href="add">添加</a> | <a href="view">搜索</a>
+    # -*- coding: utf-8 -*-
+    <html>
+    <head>
+    <title>mala通讯录</title>
+      <style type="text/css">
+      h1{
+        color : grey; 
+        font-size : 27px;
+      }
+      a{
+        color : clack;
+        font-size : 10pt; 
+      }
+      </style>
+    </head>
+    <body>
+    <h1>通讯录程序</h1>
+    <br />
+    <hr />
+    <a href="add">添加</a> | <a href="view">搜索</a>
+
 
 然后一个个写页面
 
-add.tpl 添加页面模板
+`add.tpl` 添加页面模板
   
-  .. literalinclude:: ../_static/src/web3/views/add.tpl
+.. literalinclude:: ../../src/5_webmala/web3/views/add.tpl
 
-view.tpl 搜索页面模板
+`view.tpl` 搜索页面模板
 
-  .. literalinclude:: ../_static/src/web3/views/view.tpl
-  
+.. literalinclude:: ../../src/5_webmala/web3/views/view.tpl
+
+
 Done!
 
 .. image:: ../_static/snap/newadd.png
 
 .. image:: ../_static/snap/newview.png
 
+
 自动跳转
 --------------------------------
 

source/ch05/MakeASite.rst

+.. include:: ../LINKS.rst
+
 完成基本功能
 =========================
 
 
 小白计划了一下功能:
 
- - 添加记录
-
- - 查看记录
+- 添加记录
+- 查看记录
 
 很简单的两条
 
 
 新建views文件夹,建立add.tpl模板文件,写入Html代码
 
-  .. literalinclude:: ../_static/src/web2/views/add.tpl
+
+.. literalinclude:: ../../src/5_webmala/web2/views/add.tpl
+
 
 小白晕掉了……
 
 虽然还是看不懂,反正可以运行了,以后再作研究吧
 
+
 调用模板
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
 小白将他改造成了一个dict数据库,简化了一下
 
-  .. literalinclude:: ../_static/src/web2/textdb.py
+
+.. literalinclude:: ../../src/5_webmala/web2/textdb.py
   
+
 然后修改了一下main.py代码
 
-  .. literalinclude:: ../_static/src/web1/main.py
+.. literalinclude:: ../../src/5_webmala/web2/main.py
+
 
 使用成功!
 
-.. image:: ../_static/snap/viewtpl.png
+- 访问网站首页:
+
+.. image:: ../_static/figs/ch05-web2-0.png
+
+- 追加地址:
+
+.. image:: ../_static/figs/ch05-web2-1.png
+
+- 观察数据:
+
+.. image:: ../_static/figs/ch05-web2-2.png
+
 
 计划
 -----------------------------

source/ch05/TryBottle.rst

 
 小白想让自己的通讯录在自家电脑、学校电脑和手机上都能同步数据,于是就想做成一个网站,来存放自己的通讯录。
 
-小白用bing查了一下"python web",蹦一下跳出好多:
+小白用Google查了一下"python web",蹦一下跳出好多:
 
  - `PythonWeb框架`_ ,第 1 部分: 使用 Django 和 Python 开发 Web 站点
 
 
 点进去一看,原来django和web.py都是“框架”
 
-行者曰:用Python作Web,用框架吧!简单又快速!
+行者曰::
+
+  用Python作Web,用框架吧!简单又快速!
+
 
 框架是什么?
 
 
 不过小白看到这句::
 
-  status = '200 OK'
+    status = '200 OK'
+
 
 惊呼:虽然不知道是什么意思,但一看“OK”就知道这个函数是正常情况下显示什么内容,但是异常情况应该更多。
 这里是200,那么404、403、500、505……总之1到n的都要自己写?
   
 晕倒,这些都是什么东西啊?不过这样看来,框架的内容还是很丰富的,基本上是有什么直接调用就好了。
   
-坊间传说,很酷的框架bottle,速度超快,超级轻巧,拥有一系列高级功能。
+坊间传说,很酷的框架 `Bottle`_ ,速度超快,超级轻巧,拥有一系列高级功能。
+
 
 安装
 ----------------------------
 
 于是上列表吼,“有没有Bottle的中文版文档呀?”。有行者说,“Bottle的文档早就翻译好了。到下面的链接看看吧。”
 
-* http://pro.yeeyan.org/bottle08/articles
+- http://pro.yeeyan.org/bottle08/articles
 
 原来,热心行者早就翻译了呢!
 
 
 ::
 
-  from bottle import route, run
-  
-  @route('/:name')
-  def index(name='World'):
-      return '<b>Hello %s!</b>' % name
-  
-  run(host='localhost', port=8080)
+    from bottle import route, run
+    @route('/:name')
+    def index(name='World'):
+        return '<b>Hello %s!</b>' % name
+    run(host='localhost', port=8080)
 
-纯粹从文档里面抄来的。一个简易型网站不到10行就构建好了,爽!
+纯粹从文档里面抄来的。一个可用的网站将将5行就构建好了,爽!
 
 为了方便阅读,同时也能够加强理解,小白吧from语句换成了import语句。
 
-  .. literalinclude:: ../_static/src/web1/TryBottle.py
-  
-小白阅读一下代码,不懂的地方google一下
+  .. literalinclude:: ../../src/5_webmala/web1/TryBottle.py
 
-@ 装饰器,相当于index=bottle.route(index),一个很好的特性
 
-这里起到URL映射的作用。
+其中:
+    @装饰器,相当于 `index=bottle.route(index)` ,一个很好的特性
+    这里起到URL映射的作用。
+    而且在 `Bottle`_ 中, URL映射是可以堆叠的,这里使用了两个 `bottle.route` 装饰器;
+    分别捕获两种情况:
 
-URL映射:
-~~~~~~~~~~~~~~~~~~~~~~
+      - http://localhost:8080/
+      - http://localhost:8080/myname
 
-根据正则表达式匹配URL。
 
-比如一个函数index定义了网站首页
+在上面的代码中::
 
-根据.*进行URL映射,那么无论URL是什么,都会运行index函数
+    run(host='localhost', port=8080)
 
-程序中index函数接受了一个GET参数
+这一段run函数就是发布应用。其中,
+`host='localhost'`是以本机做为服务器(host)。
+port就是发布端口,随便设一个四位数字就行了,我们这里设置为8080。
+
+
 
 GET
 ~~~~~~~~~~~~~~~~~~~~~~~~~
 
+程序中index函数接受了一个GET参数
+
 常常在URL后面看到以‘?’开头的长长的字符串,以&隔开,这就是GET参数
 
-在上面的代码中, run(host='localhost', port=8080)这一段run函数就是发布应用。其中,host='localhost'是以本机做为服务器(host)。
-port就是发布端口,随便设一个四位数字就行了,我们这里设置为8080。
 
 运行and调试
 -----------------------------
 
-进入目录后,python main.py一下,输出一大堆东西::
+进入目录后,`python TryBottle.py` 一下,输出一大堆东西::
   
-  Bottle server starting up (using WSGIRefServer())...
-  
-  Listening on http://localhost:8080/
-  
-  Use Ctrl-C to quit.
+    Bottle server starting up (using WSGIRefServer())...
+    Listening on http://localhost:8080/
+    Use Ctrl-C to quit.
 
-根据说明访问localhost:8080
+根据说明访问 http://localhost:8080
 
 呀,报错
 
 .. image:: ../_static/snap/malaweb_error.png
-  
-吧嘎!怎么搞得!
+
+
+怎么搞得!
 
 依据bottle.route('/:name')这一句,发现url后面必须要跟一串字符
 
 访问
 
-localhost:8080/RWPyL
+http://localhost:8080/RWPyL
 
 done!出现结果。
 
 .. image:: ../_static/snap/TryBottle.png
 
+
 装饰器故事
 ---------------------------
 
 装饰器这玩意儿,到底是怎么回事?
 
-上bing搜索一下“python 装饰器”,得出以下结果::
+上Google搜索一下“python 装饰器”,得出以下结果::
 
-  def Func(func):
+
+    def Func(func):
+        
+        def Function():
+            print('hello,world!')
+            return func
+        return Function
       
-      def Function():
-          print('hello,world!')
-          return func
-      return Function
-      
-这就是一个装饰器。可以这么来看,装饰器就是给函数添油加醋,和“类继承”有一些相似之处。
+
+这就是一个装饰器的原型。可以这么来看,装饰器就是给函数添油加醋,和“类继承”有一些相似之处。
 
 上面的装饰器,就是把一个函数func(不是函数的返回值)传进去,在Function函数中加一些东西(添加了print语句),
 然后再运行原来函数的内容(return func),最后将Function(也就是经过加工的func)作为返回值传出来。这样,

source/ch05/UseApache.rst

+.. include:: ../LINKS.rst
+
 使用apache进行发布
 =============================
 
 
 以下介绍在独立主机上debian系统配置的服务器上跑bottle
 
+
 apache
 ----------------------------
 
 
 在程序一开始添加::
 
-  #-*- coding:utf-8 -*-
-  
-  import os,bottle,sys
-  
-  os.chdir(os.path.dirname(__file__))
-  
-  # 改变工作目录,以便在相对路径(和模板查找)中继续工作
+    #-*- coding:utf-8 -*-
+    import os,bottle,sys
 
-  sys.path.append(os.path.dirname(__file__))
+    os.chdir(os.path.dirname(__file__))
+    # 改变工作目录,以便在相对路径(和模板查找)中继续工作
+    sys.path.append(os.path.dirname(__file__))
+
 
 不加这一段好像会让TextDB模块(也就是没安装的模块)无法使用的。
 
 然后把bottle.run函数去掉,添加::
 
-  application = bottle.default_app()
+    application = bottle.default_app()
   
   
   
 
 于是,再修改,在开头加上一句::
   
-  LoadModule wsgi_module modules/mod_wsgi.so
+    LoadModule wsgi_module modules/mod_wsgi.so
   
+
 再次尝试发布,仍然没有结果,那么就是mod_wsgi没有爱装,于是安装之::
 
-  sudo apt-get install libapache2-mod-wsgi 
+    sudo apt-get install libapache2-mod-wsgi 
+
 
 安装完毕之后,发布,哈哈,看到结果了。
 
 ----------------------------------------------
 
 小白终于可以通过浏览器在异地看到自己的网站了!发布成功!
+

source/ch05/intro.rst

+.. include:: ../LINKS.rst
 
 
 
 那么……能不能实现类似号簿管家的功能?直接同步电脑与移动设备里的条目?
 
-用web!做个网站嘛!在哪里都能访问,这年头谁还用本地储存啊。
+- 用web!做个网站嘛!在哪里都能访问,这年头谁还用本地储存啊。
+- 那么,有什么东西可以一直把我的网站挂在互联网上?上网问问。
+::
 
-那么,有什么东西可以一直把我的网站挂在互联网上?上网问问。
+    行者回答:“服务器!”
 
-行者回答:“服务器!”
+一阵 Google ……找到了一大堆服务器商家。呀!怎么都这么贵!几百块一个月呢!
 
-一阵Bing……找到了一大堆服务器商家。呀!怎么都这么贵!几百块一个月呢!
+.. sidebar:: 历史
+    :subtitle: 一个公案
 
-突然,小白发现,网页的角落里有个便宜的东西:VPS。
+    - 有关 Linux 的名字,包含了一个著名的公案
+    - 参考: `自由与开源 (built by S5) <http://zoomquiet.org/res/s5/071020-freedom-discuss/071020-freedom-zeuux/>`_
+    - 简单的説 Linux 仅仅是个开源操作系统内核, 包含了大量实用软件的 Linux 发行版才是我们真正使用的操作系统;
+    - 那些丰富的实用工具,大多处于 GNU 工程管理中
+    - 但是,人们习惯了将整个操作系统称作 Linux,忽略了 GNU 的贡献
 
-VPS?小白在bing上面搜索了一下,找到这篇文章: http://www.west263.com/info/html/IDCzixun/xunizhuji/20080221/1806.html 
-VPS就像一台远程的电脑,任小白自由操控,想安装什么就安装什么。
+
+- 突然,小白发现,网页的角落里有个便宜的东西:VPS。
+- VPS?小白在 Google 上面搜索了一下,找到这篇文章: 
+
+    - 关于VPS、虚拟主机、独立服务器的比较
+    - http://www.west263.com/info/html/IDCzixun/xunizhuji/20080221/1806.html 
+    - VPS就像一台远程的电脑,任小白自由操控,想安装什么就安装什么。
 
 真爽!小白在行者的帮助下购买了一台VPS后,却发现VPS的系统不是windows的!
 
-在询问行者之后,小白彻底晕倒:坑死爹了,原来是Linux!不过不会用啊,bing一下“linux”,出现wikipedia的连接:
+在询问行者之后,小白彻底晕倒:坑死爹了,原来是Linux!不过不会用啊,Google一下“linux”,出现wikipedia的连接:
 
-zh.wikipedia.org/wiki/Linux
 
-linux真名叫GNU/linux,是自由软件的巨头,及其好用的操作系统之一,有许多发行版,最著名的有redhat和debian。他们相比windows的好处:
 
-1.开源免费,没有盗版,省去了“购买windows”或“破解”的步骤
 
-2.软件安装方便,一般都提供.deb等软件包,debian甚至可以通过apt-get一句话搞定软件安装。
 
-3.可定制性强,选择多,爱用什么用什么,桌面系统就有Gnome\KDE\Xfce\LXDE……一般软件通过配置文件都可以随意修改。
+- http://zh.wikipedia.org/wiki/Linux
+- Linux真名叫 GNU/linux,是自由软件的巨头,及其好用的操作系统之一,有许多发行版,最著名的有redhat和debian。
+- 他们相比windows的好处:
 
-4.很难中毒,安全性强
-……
+    #. 开源免费,没有盗版,省去了“购买windows”或“破解”的步骤
+    #. 软件安装方便,一般都提供.deb等软件包,debian甚至可以通过apt-get一句话搞定软件安装。
+    #. 可定制性强,选择多,爱用什么用什么,桌面系统就有Gnome\KDE\Xfce\LXDE……一般软件通过配置文件都可以随意修改。
+    #. 很难中毒,安全性强
+    #. ……
+
 
 这么多好处!小白决定摈弃windows,投奔linux。小白先从国内牛X的linux社区linuxsir探了探口风,知道了现在使用人数最多的是Ubuntu。
-小白直接找到了他的老巢:http://www.ubuntu.org.cn/,然后下载、安装……OK,小白现在已经在完全自由的空间里了!
+小白直接找到了他的老巢:http://www.ubuntu.org.cn/ ,然后下载、安装……OK,小白现在已经在完全自由的空间里了!
 
 
- 1.初窥bottle,用bottle进行热身,熟悉web开发
+.. sidebar:: 提醒
+    :subtitle: 以上过程包含大量危险行为
 
- 2.完成基本功能(使用模板等功能完成基本表单式网站,介绍一下Post\Get参数传递和模板系统)
- 
- 3.人性化(介绍mako模板和网页间多的跳转,完善软件功能)
- 
- 4.HTML和CSS
- 
- 5.用apache和mod_wsgi发布bottle
+    - Linux 再美好,要学习的也非常多
+    - 不能简单的想象可以立即学会
+    - 可以先在Windows 中使用 `VirtualBox`_ 在虚拟机中先安全体验起来
+    - 而且,有了VPS 后,通过 `PuTTY`_ 安全接入远程主机后,其实就可以完全的体验自由的 Linux 了!
 
+
+接下来我们将随小白快速体验,如何一步步通过 Python 的相关模块,完成整个应用网站的创作/改进/发布 的历程...

source/ch05/suggested_reading.rst

+.. include:: ../LINKS.rst
+
+
 推荐阅读
 ===============
 

source/ch05/summary.rst

+.. include:: ../LINKS.rst
+
 小结
 ===============
 

src/5_webmala/web1/TryBottle.py

 # -*- coding: utf-8 -*-
 import bottle #导入模块
 
-@bottle.route('/') 
+#@bottle.route('/') 
 @bottle.route('/:name') #URL映射
 def index(name='World'):  #形参=GET
     return '<b>Hallo %s!</b>' % name

src/5_webmala/web2/data.tdb

 (dp0
-S'\xe5\x91\xa8'
+S'Zoom'
 p1
 (dp2
 S'lastname'
 p3
-S'\xe7\x90\xa6'
+S'Quiet'
 p4
 sS'address'
 p5
-S'\xe7\x8f\xa0\xe6\xb5\xb7\xe9\x87\x91\xe5\xb1\xb1'
+S'ZhuHai'
 p6
 sS'email'
 p7
 g1
 sS'phone'
 p10
-S'1370......'
+S'1370...'
 p11
 ss.

src/5_webmala/web2/views/add.tpl

 <html>
-<head>
-<title>通讯录</title>
-</head>
+    <head>
+        <title>通讯录</title>
+    </head>
 <body>
-<form name="add" id="add"  method="post">
- First name:
-<input type="text" name="firstname" />
-<br />
-Last name:
-<input type="text" name="lastname" />
-<br/>
-Address:
-<input type="text" name="address" />
-<br/>
-Phone:
-<input type="text" name="phone">
-<br/>
-E-mail:
-<input type="text" name="email">
-<br/>
-<input type="submit" value="Submit" />
-</form>
+    <form name="add" id="add"  method="post">
+    First name: <input type="text" name="firstname" />
+    <br />
+    Last name:  <input type="text" name="lastname" />
+    <br/>
+    Address:    <input type="text" name="address" />
+    <br/>
+    Phone:      <input type="text" name="phone" />
+    <br/>
+    E-mail:     <input type="text" name="email" />
+    <br/>
+    <input type="submit" value="Submit" />
+    </form>
 </body>
 <hmtl>
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.