2012年9月10日星期一

备份VeryCD的进一步讨论(三): 使用web.py框架架设山寨网站

其实建站最常用的方法还是php,但是要让被python宠坏的我来写枯燥乏味的php脚本,实在不想遭这个罪,更何况我底层都用的python实现,如果网站也用python的话,调用底层代码起来就无比方便了。

-
说是这样说,不过我之前从来没用过python的框架,唯一一次尝试django,就被其罗嗦无比的tutorial给击败了,半天都弄不出成品的我是懒 得去看那些罗嗦无比的说明的。不过web.py不一样。有人说django写的是基于django的网站,XXX框架写的是基于XXX框架的网站,而 web.py写的就是基于python的网站。这点极其吸引我。于是就决定是web.py了。
-
事实证明web.py非常的……很难说。要说不好使吧,上手的确快,半小时我就明白了基本用法,搭建起了山寨站点的框架。要说好使吧,render引擎的 文档极度有问题,各种需求会导致各种work around,最后就会导致代码难看无比@@ 当然也许有优雅的实现,但是它文档太简略,只能自己摸索,一个一个补丁打上去,最后做出来的东西样子当然就不咋地了。
-
闲话少说,进入正题。
-
==============================
目录
1.安装web.py
2.web.py框架
3.发布网站
=============================
1.安装web.py
sudo apt-get install python-setuptools
sudo easy_install web.py
是的,到这里就装好了

 2.web.py框架 建立一个code.py文件如下
import web
#下面这个句法的含义是把/交给index类来处理
urls = (
  '/', 'index'
)
app = web.application(urls, globals())
#处理/的index类
class index:
    def GET(self):
        return "Hello, world!"
if __name__ == "__main__":
    app.run()
好了,很简单,运行:
python code.py
然后自己在浏览器里面输入http://localhost:8080,应该就有Hello World了。

 接受参数 修改index类如下
class index:
    def GET(self):
        i = web.input(id=None)
        if i.id:
            return 'hello '+i.id
        else:
            return 'hello all'
那么输入http://localhost:8080/?id=observer 返回应该为hello observer

 网页的render引擎 建立templates目录,编辑hello.html

$def with (name)
Hello $name
第一行必备,接受name参数,接下来就是显示name参数,参数前加上$即可 然后修改code.py加入
render = web.template.render('templates')

之后在index类中修改return为
 return render.hello('world')

好了,render引擎就这么用。

数据库
 
db = web.database(dbn='sqlite', db='verycd.sqlite3.db')
 
#搜索vc最新更新的20个资源
vc = db.select('verycd',order='updtime DESC',limit=20)
 
#搜索指定topic id的资源

myvar = dict(id=i.id)

rec = db.select('verycd',vars=myvar,where="verycdid=$id") 
 
就是这些了,框架就是这么弄的,想自己整一个web应用出来,还得熟悉html语言,这个展开就大了去了,不说了,按照惯例,文末要附上代码,但是因为我的web.py代码写得太难看,所以这次就不贴了。

 3.发布网站 安装flup:

sudo easy_install flup 
修改 code.py使之工作 在app.run()之前加入
web.wsgi.runwsgi = lambda func, addr=None: web.wsgi.runfcgi(func, addr)

在开始的时候加入
web.config.debug = False

安装使用spawn-fcgi和nginx(以下方法需要ubuntu 9.10)
sudo apt-get install spawn-fcgi
sudo spawn-fcgi -u www-data -g www-data -d /dir/to/code/ -f /dir/to/code/code.py -a 127.0.0.1 -p 9001 -F 2
 
sudo apt-get install nginx

编译nginx的配置文件(示例,需要修改路径,名称等):
#/etc/nginx/sites-enabled/simplecd
fastcgi_cache_path /var/www/simplecd/cache
                    levels=1:2  keys_zone=webpy:50m;
server {
        listen 80;
        server_name xen.simplecd.org;
        access_log /var/log/nginx/xen.simplecd.org.access_log;
        error_log /var/log/nginx/xen.simplecd.org.error_log warn;
        root /var/www/simplecd/;
        index index.html;
        location / {
            include fastcgi_params;
            fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
            fastcgi_param PATH_INFO $fastcgi_script_name;
            fastcgi_pass 127.0.0.1:9001;
            fastcgi_cache webpy;
            fastcgi_cache_key $server_addr$request_uri;
            fastcgi_cache_valid any 1m;
            fastcgi_hide_header Set-Cookie;
        }
        location /static/ {
            if (-f $request_filename) {
                rewrite ^/static/(.*)$ /static/$1 break;
            }
        }
}


- 运行nginx
#查看配置文件是否可用
sudo nginx -t
 
#运行nginx
sudo nginx

好了,访问你网站的域名或IP,一个如上的网站已经发布好了

没有评论:

发表评论