webpy的Hello World

首先感谢webpy作者Aaron H. Swartz (1986 – 2013)。

第一次接触Python开发网站是在今年3月底,使用的是Django,当时也是第一次接触网站开发,对Apache也不熟悉(其实是只知道一个名字),当时的各种配置让我感觉到要崩溃了,好歹在windows下配置成功了一次。后来在linux下死活都不行,原来是忘了chown py文件给apache,现在记忆犹新。Django呢,确实很完善,文档也不少,在目前算是python web框架中用的最多的,也是最火的。不过我倒不太喜欢这种各种被包办被绑架的感觉,后来一直都在找python web框架,无奈就那些,也可能是自己了解不多。不过,有个我也忘了是怎么回事的机缘,让我有兴趣了解了下webpy,感觉比较符合我自己的口味。简单,明了。前段时间用PHP开发了一个微信公众平台的小网站,现在再来看Python web开发也更熟悉吧。言归正传,开始webpy的Hello World(好吧,其实是官网上的代码,我再加点修饰)。关于window 64bit下的python web开发环境的搭建请参考Windows 64bit下安装Apache+Python+mod_wsgi+php。

webpy安装

到 官网下载包,通常的python包的安装方式,python setup.py install。安装成功测试,就是打开一个python的console,然后import web,没出错就成功了。

Hello webpy!

这个是在官网为了表明webpy是多么的简洁,贴在首页的的一段代码。那urls就是使用正则表达式来配置url的处理类。新建一个文件code.py,把下面的代码粘贴进去,然后在console里面输入python code.py,然后回车。就开启了一个在8080端口的http服务(当然要是在没有语法错误的情况下)。在浏览器中打开http://localhost:8080/就可以看到Hello webpy!了。
import web
        
urls = (
    '/(.*)', 'hello'
)
app = web.application(urls, globals())

class hello:        
    def GET(self, name):
        if not name: 
            name = 'webpy'
        return 'Hello, ' + name + '!'

if __name__ == "__main__":
    app.run()

上面的代码只是为了说明webpy的简单,官网上提供了一个常用的代码框架。就是如下面的目录树
webapp/
static/
js/
css/
images/
templates/
sql/
db.py
app.py
config.py
view.py
主要分为静态文件、模板文件(*.html)、sql语句、数据库查询函数、网站应用的主文件、配置文件、视图文件。
简单来说,静态文件就是网站中所需要的图片、css和js文件等。模板文件是webpy自用的模板系统,就是将数据填充到模板中生成html文件。sql则是使用的sql文件。db.py主要包含所使用的数据库的查询修改删除等进一步包装的函数。app.py则把url绑定给处理的类,然后生成application对象。view.py主要包含html中局部可以复用的数据填充模板的方法。config.py则是配置数据库用户名密码,缓存,DEBUG开关等等。当然你也可以不用上面的,上面的对一个比较大型的应该是必不可少的。这个代码架构来自 http://webpy.org/skeleton/0.3。

在Apache生产环境下的webpy

在Apache的生产环境下使用webpy,主要两个方面的配置和修改。

Apache的配置

在你的httpd.conf中添加下面的一段。下面的一段是我自己的,大家可以根据自己的apache以及web应用的位置修改。demo.py就是上一个部分的应用主文件app.py,而static则是上一个部分的static。静态文件夹配置不是必要的,但是下面的两个理由让你最好配置一下。1、为了性能。apache直接处理静态文件,比转交给webpy处理更加直接。2、为了不修改静态文件的地址。webpy开发环境与apache生产环境的根目录是不一样的,因此不做以下映射的话是要改不少东西的。另外还有apache文件夹的权限之类的,参考 http://webpy.org/cookbook/mod_wsgi-apache。不过我是在windows下,貌似只添加下面的就可以了。
<IfModule wsgi_module>
    WSGIScriptAlias /demo "D:/Program Files/Apache Software Foundation/Apache2.4/htdocs/webpy/demo.py/"
    Alias /static "D:/Program Files/Apache Software Foundation/Apache2.4/htdocs/webpy/static"
    AddType text/html .py
</IfModule>

webpy主应用文件app.py的修改

如果你app.py的代码中有import app.py同文件夹下的.py文件,那么在import它们之前添加以下代码(对于其他import 应用目录下py文件的文件也需要修改)
import os,sys
workingpath = os.path.dirname(__file__)
sys.path.append(workingpath)
这是把app.py所在的文件夹路径添加到python的环境变量中,这样在python就可以找得到。同样这个也是因为apache的根目录和web app的根目录是不一致的。如果只是import python自己的包或者安装的包(比如webpy)的话是不需要的。PS:如果__file__报错的话,请自行google找替代办法(就是使用sys.argv[0])。

app.py中必须有一个application变量,并且让它等于Hello webpy!部分的app.wsgifunc(),不然mod_wsgi模块是会报错的。

下面是我的一个例子的demo.py(前面所说的app.py)

import sys, os, time
import urllib,urllib2,cookielib
import web

workingpath = os.path.dirname(__file__)
sys.path.append(workingpath)

from view import render

urls = (
     '/index', 'index',
     '/login','login',
    )

app=web.application(urls,globals())
class index:
    def GET(self):
        return render.base("myview",render.news(10),"news")

class login:
    def GET(self):
        return render.base("myview",render.login(10),"login")

application = app.wsgifunc()
if __name__=="__main__":
    app.internalerror=web.debugerror
    app.run()


另外,在调试或者在修改代码之后,注意删除*.pyc文件大笑。不然你可能找了半天都不知道是为什么你的修改没有反映到你的网站上。因为是动态的,所以apache并不需要重启。建议建立一个有下面代码的.bat文件在根目录下,每次点击一下就行了。

del *.pyc

完成了上面的就可以开始webpy的DIY之旅了。


你可能感兴趣的:(python,webpy,web框架,mod_wsgi)