CWYAlpha

Just another WordPress.com site

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

leave a comment »


其实建站最常用的方法还是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,一个如上的网站已经发布好了


from duyamin’s blog: http://www.duyamin.com/2012/09/verycd-webpy.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+DuyaminsBlog+%28duyamin%E2%80%99s+blog%29

Written by cwyalpha

十一月 24, 2012 在 3:26 下午

发表在 Uncategorized

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s

%d 博主赞过: