pylons建站日记1_第一次亲密接触

为什么想学习pylons?

打算写一个抓新闻的网站,可以把那些新闻打包为纯文本,下载到pda上慢慢看.

行事先利其器,先选一个框架.

以前用了一段时间的Django,觉得它的自动化程度比较高,很适合快速开发,但是有利就有弊,相对而言,我觉得其不足有:

1.其ORM对于一些简单的应用还是不错,但是对于多表的操作就没有sqlalchemy优雅.

2.模板和代码完全分离从出发点看来是不错,但是这样做带来的缺点就
a.编写麻烦
b.会有许多琐碎的自定义标签
此外,对于我这种页面和代码统统负责的孤家寡人来说有点画蛇添足
我的观点是,总有许多一次性的代码,把这些代码扔进页面是不错的选择.
听说mako效率不错,想看看

3.newform有种鸡肋的感觉

4.文件上传集成到Model中的做法不是很灵活

5.url映射不够智能,太繁琐

等等

于是,去看看pylons,听说它是自由度比较高.

我先从svn中checkout出pylons的源代码,安装,如同python的安装惯例

setup.py install

然后又去checkout出sqlalchemy和mako的代码装上(追新族:),方法类似.(mako好像自带了,可以不装,不过不是最新版)
我列举一下svn地址,以便安装

pylons
http://pylonshq.com/svn/Pylons/trunk

mako
http://svn.makotemplates.org/mako/trunk

sqlalchemy
http://svn.sqlalchemy.org/sqlalchemy/trunk

然后将python安装路径下的Scripts目录加入系统的PATH环境变量,正式开工.

先创建项目,在命令行下切换到一个合适的路径,执行如下的命令,其中shot_net为项目名,可以自己取.

paster create --template=pylons shot_net

它会自动的创建一个项目的目录,我们cd进入该目录,执行

paster serve --reload development.ini

启动它自带的服务器,命令行中会告诉你端口,可以到development.ini中修改(如下),我修改为19809.

[server:main]
use = egg:Paste#http
host = 0.0.0.0
port = 19809

现在访问那个端口,可以看到这个网页
"Welcome to your Pylons Web Application"

可以看到其下当前路径下有一个与项目同名的目录,我们进入该目录下的public目录。
public目录是用来查找静态文件的。
新建一个index.html文件替换原来那个,刷新,ok,可以看到我们自己的index.html文件了。

也可以通过
http://127.0.0.1:19809/index.html
访问

然后类似下面,创建一个controller

D:\myWay\project\shot_net\shot_net>paster controller get_html
Creating D:\myWay\project\shot_net\shot_net\controllers\get_html.py
Creating D:\myWay\project\shot_net\shot_net\tests\functional\test_get_html.py

现在访问
http://127.0.0.1:19809/get_html/
就可以看到
Hello World
这个路径是自动映射的,真不错:)

然后修改shot_net/config/routing.py中的make_map,加上这么一句,注意要加在其他的connect之前

map.connect('', controller='get_html', action='index')

删除那个index.html,现在http://127.0.0.1:19809/也可以看到Hello World了.

然后照搬教程,在GetHtmlController类中添加如下的函数
这个函数中的c是用来向模板传递变量的东西,满hacker的:)

def serverinfo(self):
import cgi
import pprint
c.pretty_environ = cgi.escape(pprint.pformat(request.environ))
c.name = 'The Black Knight'
return render('/serverinfo.mako')

到templates目录下新建一个serverinfo.mako模板(我统一用utf-8编码,不加BOM)
[code]
<h2>
Server info for ${request.host}
</h2>

<p>
The URL you called: ${h.url_for()}
</p>

<p>
The name you set: ${c.name}
</p>

<p>The WSGI environ:<br />
<pre>${c.pretty_environ}</pre>
</p>
[/code]
访问
http://127.0.0.1:19809/get_html/serverinfo
OK,可以看到一堆信息.

仔细看看,有意思的有
'HTTP_ACCEPT_ENCODING': 'gzip,deflate',
表明网页是被压缩了的,自带这个功能,不错不错:)

OK,先看这么多.我去写一个页面模板.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值