Learn Python The Hard Way学习(50) - 你的第一个网站
安装lpthw.web
开始web编程前,我们需要安装一个web框架,叫lpthw.web,框架的意思就是:一些让我们工作更加简便的包。在网页程序中,人们创建了很多这样的软件包,去完成不同的工作,我们可以下载下来去引导我们自己的项目。
这里我们选择lpthw.web,当然还有很多其他的框架,我们先学习这个,有兴趣的话可以学习其他的,其实lpthw.web已经足够好用了。
使用pip安装lpthw.web:
root@he-desktop:~# pip install lpthw.web
Downloading/unpacking lpthw.web
Downloading lpthw.web-1.1.tar.gz (87Kb): 87Kb downloaded
Running setup.py egg_info for package lpthw.web
Installing collected packages: lpthw.web
Running setup.py install for lpthw.web
Successfully installed lpthw.web
root@he-desktop:~#
创建一个简单的“Hello world”项目
先创建项目目录:
root@he-desktop:~/python# cd projects/
root@he-desktop:~/python/projects# mkdir gothonweb
root@he-desktop:~/python/projects# cd gothonweb/
root@he-desktop:~/python/projects/gothonweb# mkdir bin gothonweb tests docs templates
root@he-desktop:~/python/projects/gothonweb# ls
bin docs gothonweb templates tests
root@he-desktop:~/python/projects/gothonweb# touch gothonweb/__init__.py
root@he-desktop:~/python/projects/gothonweb# touch tests/__init__.py
我们最后会把42章的游戏放进来,所以命名为gothonweb,不过现在我们需要先完成一个简单的程序。把下面的代码放到bin/app.py中:
[python]
import web
urls = (
'/', 'index'
)
app = web.application(urls, globals())
class index:
def GET(self):
greeting = "Hello World"
return greeting
if __name__ == "__main__"
app.run()
像下面这样运行这个程序:
root@he-desktop:~/python/projects/gothonweb# python bin/app.py
http://0.0.0.0:8080/
如果像下面这样:
root@he-desktop:~/python/projects/gothonweb# cd bin
root@he-desktop:~/python/projects/gothonweb/bin# python app.py
http://0.0.0.0:8080/
那么你就错了,所有的项目我们都不能进入到子目录中执行,因为在主目录我们才能保证能够访问到所有的模块和文件。
最后,使用浏览器打开http://0.0.0.0:8080/这个网址,你会看到两个东西,第一,浏览器显示Hello World,第二,在终端中打印下面的信息:
root@he-desktop:~/python/projects/gothonweb# python bin/app.py
http://0.0.0.0:8080/
127.0.0.1:37380 - - [11/Jul/2012 14:32:27] "HTTP/1.1 GET /" - 200 OK
127.0.0.1:37380 - - [11/Jul/2012 14:32:30] "HTTP/1.1 GET /favicon.ico" - 404 Not Found
这是lpthw.web打印给我们的信息,你能知道服务器正在工作了,也能知道浏览器在后台做了什么。这些信息可以方便你调试程序,比如上面的favicon.ico没有找到,就返回了一个404错误。
我没有解释任何web的工作原理,因为我要先教你安装和准备,以便更好的理解下面两个章节的练习。我们让你弄坏lpthw.web,然后再组装好,让你更加深刻的理解它。
刚才发生了什么?
下面是当你用浏览器运行程序的时候发生的事情:
你的浏览器访问了自己的电脑,使用了8080端口。
发送一个http请求给bin/app.py,并且访问/地址,一般这是网站的第一个地址。
在app.py中,我们有一个URLS和一个匹配的类。我们有/和index映射。意思就是说,如果访问/地址,我们就去找index类,然后加载请求。
现在我们找到了index类,根据类的实例运行index.GET方法,返回一个字符串给lpthw.web。
最后,lpthw.web发送回应给浏览器,让它显示。
确保你能理解上面这些。
修正错误
首先,删除第11行,刷新你的浏览器,你会看到一个包含错误信息的页面。你知道greeting不存在了,但是lpthw.web还是给了一个很友好的错误提示:
检查Local vars的输出,看看你是否能跟踪这些变量。
看看Request Information段落。有没有上面熟悉东西,这些信息是浏览器发送给gothonweb程序的。很多你都没用过,所以现在你要去了解一下他们。
试试用其他方法破坏这个程序,看看会发生什么,也别忘了看看终端输出了什么信息。
创建基本模板
你有没有注意到输出的Hello World不是好的HTML页面,我们需要合适的HTML响应页面,我们让这个程序显示大大的绿色的Hello World。
第一部是把下面的代码输入到templates/index.html文件中:
[html]
$def with (greeting)
<html>
<head>
<title>Gothons Of Planet Percal #25</title>
</head>
<body>
$if greeting:
I just wanted to say <em style="color: green; font-size: 2em;">$greeting</em>.
$else:
<em>Hello</em>, world!
</body>
</html>
如果你不太懂HTML,先去学习一下,上面这个文件只是一个模板,作用是lpthw.web会找到变量名,然后替换成相应的字符串。
下面要修改一下app.py的代码,让它加载模板文件:
[python]
import web
urls = (
'/', 'index'
)
app = web.application(urls, globals())
render = web.template.render('templates/')
class index(object):
def GET(self):
greeting = "Hello World"
return render.index(greeting = greeting)
if __name__ == "__main__":
app.run()
注意render这个新变量,还有index.GET函数最后的返回值。
刷新你的浏览器,你会看到一些不同的变化。打开浏览器的源码,你可以看到对应的HTML代码。
下面解释一下模板的工作原理:www.zzzyk.com
在app.py中增加了一个新的变量render。这个变量是web.template.render的实例。
这个render对象知道怎么加载templates文件夹中的html文件,因为我们给它传递了一个参数。
然后,当运行到GET函数的时候,我们把greeting变量传递到render.index中。
render.index方法是一个魔术方法,会在templates文件夹中寻找index.html文件。
在index.html文件中,我们取得了greeting参数,就想函数一样,并且和python的缩进也是一样的,所以确定你写对他们。
最后,html文件使用greeting变量,并且在相应位置打印出字符串。
改变greeting变量的值,你会看到浏览器会做相应的变化。再创建一个foo.html文件,我们可以使用render.foo()代替render.index()。
加分练习
查看 http://webpy.org/ 中的文档,它和lpthw.web的功能差不多。
实践一下上面网站上看到的东西。
了解一下HTML5和CSS3的知识。并且练习一下。
如果你有朋友懂Django的话,你可以让他帮助你用Django完成下面50,51,52的练习。
作者:lixiang0522
补充:Web开发 , Python ,