Learn Python The Hard Way学习(50) - 你的第一个网站

最后3章会很难,你必须花比较多的时间在上面。首先,你要为你的游戏做一个简单的网页版本。所以你必须完成46章的练习,并且安装了pip软件包,和使用项目框架。如果你不记得了,回到46章复习一下。

安装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中:
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,然后再组装好,让你更加深刻的理解它。

刚才发生了什么?
下面是当你用浏览器运行程序的时候发生的事情:
  1. 你的浏览器访问了自己的电脑,使用了8080端口。
  2. 发送一个http请求给bin/app.py,并且访问/地址,一般这是网站的第一个地址。
  3. 在app.py中,我们有一个URLS和一个匹配的类。我们有/和index映射。意思就是说,如果访问/地址,我们就去找index类,然后加载请求。
  4. 现在我们找到了index类,根据类的实例运行index.GET方法,返回一个字符串给lpthw.web。
  5. 最后,lpthw.web发送回应给浏览器,让它显示。
确保你能理解上面这些。

修正错误
首先,删除第11行,刷新你的浏览器,你会看到一个包含错误信息的页面。你知道greeting不存在了,但是lpthw.web还是给了一个很友好的错误提示:
  1. 检查Local vars的输出,看看你是否能跟踪这些变量。
  2. 看看Request Information段落。有没有上面熟悉东西,这些信息是浏览器发送给gothonweb程序的。很多你都没用过,所以现在你要去了解一下他们。
  3. 试试用其他方法破坏这个程序,看看会发生什么,也别忘了看看终端输出了什么信息。
创建基本模板
你有没有注意到输出的Hello World不是好的HTML页面,我们需要合适的HTML响应页面,我们让这个程序显示大大的绿色的Hello World。

第一部是把下面的代码输入到templates/index.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的代码,让它加载模板文件:
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代码。

下面解释一下模板的工作原理:
  1. 在app.py中增加了一个新的变量render。这个变量是web.template.render的实例。
  2. 这个render对象知道怎么加载templates文件夹中的html文件,因为我们给它传递了一个参数。
  3. 然后,当运行到GET函数的时候,我们把greeting变量传递到render.index中。
  4. render.index方法是一个魔术方法,会在templates文件夹中寻找index.html文件。
  5. 在index.html文件中,我们取得了greeting参数,就想函数一样,并且和python的缩进也是一样的,所以确定你写对他们。
  6. 最后,html文件使用greeting变量,并且在相应位置打印出字符串。
改变greeting变量的值,你会看到浏览器会做相应的变化。再创建一个foo.html文件,我们可以使用render.foo()代替render.index()。

加分练习
  1. 查看  http://webpy.org/  中的文档,它和lpthw.web的功能差不多。
  2. 实践一下上面网站上看到的东西。
  3. 了解一下HTML5和CSS3的知识。并且练习一下。
  4. 如果你有朋友懂Django的话,你可以让他帮助你用Django完成下面50,51,52的练习。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值