Size: 7194
Comment: Rockety的 Karrigell 使用体验
|
Size: 8778
Comment:
|
Deletions are marked like this. | Additions are marked like this. |
Line 4: | Line 4: |
''' Rockety的 Karrigell 使用体验 ''' |
''' Rockety的 Karrigell 使用体验 ''' |
Line 8: | Line 6: |
== Karrigell体验 == |
== Karrigell == |
Line 11: | Line 8: |
配置选项在配置文件中设定。默认为服务器目录中的'''Karrigell.ini'''。你可以在命令行把它设为其它的文件。 |
配置选项在配置文件中设定。默认为服务器目录中的Karrigell.ini。你可以在命令行把它设为其它的文件。 |
Line 16: | Line 12: |
=== [Directories] === |
==== [Directories] ==== |
Line 20: | Line 15: |
设置'''root'''选项为根目录的完整路径,你从那里发布文档。初始安装这一项没有设定,默认为服务器目录。 | 设置root选项为根目录的完整路径,你从那里发布文档。初始安装这一项没有设定,默认为服务器目录,即指向为Karrigell/webapps/,这个选择你大可不必设置,因为是默认的。 |
Line 24: | Line 19: |
受保护目录列表;对于这些目录中的每个脚本,执行前都会先执行一个叫'''AuthentScript.py'''的脚本。这个'''AuthentScript.py'''必须由管理员创建并放进目录。 | 受保护目录列表;对于这些目录中的每个脚本,执行前都会先执行一个叫AuthentScript.py的脚本。这个AuthentScript.py必须由管理员创建并放进目录。 |
Line 26: | Line 21: |
默认,只有'''admin'''目录是受保护的。用'''“;”'''分割来添加更多的目录。 |
默认,只有admin目录是受保护的。用“;”分割来添加更多的目录。 |
Line 33: | Line 27: |
'''all''' = 所有人 '''none''' = 没有人 '''admin''' = 只有管理员 - 它的登录密码由'''admin'''目录中的'''k_password.py'''来配置。 |
{{{ all = 所有人 none = 没有人 admin = 只有管理员 - 它的登录密码由admin目录中的k_password.py来配置。 }}} |
Line 41: | Line 34: |
=== [Applications] === |
==== [Applications] ==== |
Line 45: | Line 37: |
=== [Alias] === | ==== [Alias] ==== 你可以为某个目录指定一个别名。例如,如果你创建这个别名:scripts = C:\My Documents\Karrigell scripts,那么http://localhost/scripts/index.htm这个url就会访问c:\My Documents\Karrigell scripts\index.htm这个文件。 |
Line 47: | Line 40: |
你可以为某个目录指定一个别名。例如,如果你创建这个别名:'''scripts = C:\My Documents\Karrigell scripts''',那么[http://localhost/scripts/index.htm]这个url就会访问c:\My Documents\Karrigell scripts\index.htm这个文件。 | 这外功能很有意思,可以将你的服务器目录与开发目录分开,同时又不至于影响你的工作。 |
Line 49: | Line 42: |
=== [Server] === |
==== [Server] ==== |
Line 53: | Line 45: |
设置服务器端口(默认为80) | 设置服务器端口(默认为80),建议使用这个选择,如果你的系统里还安装了Apache,如果直接运行python Karrigell.py,就是不能不启动服务器了,Karrigell.ini使用这个port设置功能后,会指向一个8081的服务器端口。 当然,你也可以不开启,但在启动服务器后,要指明端口: {{{ python Karrigell.py -P 8081 }}} |
Line 74: | Line 72: |
Line 81: | Line 78: |
=== [Translation] === |
==== [Translation] ==== |
Line 88: | Line 83: |
5.编程 | === 设置MySQL与SQLite === ==== [密码设置] ==== Karrigell提供了两种默认的数据库支持,即MySQL和SQLite,我试用了下MySQL,能连接到数据库,并自动生成数据库,并能像phpMyAdmin那样管理数据库,同时还能根据所提供的数据库,自动生成py程序代码,感觉很爽。 通过简单的设置,这些功能就能使用了。 在Karrigell中的admin目录中,执行下面的命令: {{{ python k_password.py }}} 输入用户名及密码,如root,123。 ==== [使用方法] ==== 在浏览器中输出: {{{ http://localhost:8000/InstantSite/mysql/index.ks/index }}} 这些就能看到MySQL的数据库登录界面,输入出MySQL的服务器名称(一般为''localhost''),用户名及密码,就可以进入数据库进行操作了。 |
Line 90: | Line 99: |
=== 编程 === | |
Line 92: | Line 102: |
*纯粹的python脚本,有一点不同,里面嵌有html *karrigell服务,可以处理整个站点 *象PHP那样,将python代码嵌入HTML |
* 纯粹的python脚本,有一点不同,里面嵌有html * karrigell服务,可以处理整个站点 * 象PHP那样,将python代码嵌入HTML |
Line 98: | Line 107: |
5。1 访问HTTP环境 |
==== 访问HTTP环境 ==== |
Line 102: | Line 110: |
*HEADERS | * HEADERS {{{ print HEADERS }}} 将会得到: |
Line 104: | Line 116: |
是关于HTTP头的一个字典:键是头名称,值是头信息的值。例如HEADERS[‘ACCEPT-LANGUAGE']将返回accept-language头部信息 | {{{ {'accept-language': 'zh-cn,zh;q=0.5', 'accept-encoding': 'gzip,deflate', 'keep-alive': '300', 'accept': 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'user-agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.7.12) Gecko/20050919 Firefox/1.0.7', 'accept-charset': 'gb2312,utf-8;q=0.7,*;q=0.7', 'connection': 'keep-alive', 'cookie': 'sessionId=XWPqs2hw', 'host': 'localhost'} }}} * RESPONSE 大小写不敏感 |
Line 106: | Line 122: |
{{{ {'Content-Type': 'text/html'} }}} == 在gadfly数据库中存储对象 == Python脚本可以存储和检索数据库中的数据,无论是关系型数据库(象MySQL、PostGreSQL、SQLite)、对象数据库(象ZODB)还是其它类型的数据库(MetaKit、KirbyBase),只需使用适当的模块即可(参考http://www.python.org/cgi-bin/moinmoin/DatabaseProgramming)。这些产品某些时候需要下载、安装以及学习如何使用它们。为了让这些变得简单,Karrigell基于gadfly数据库提供了一种完整的存储解决方案。 |
|
Line 107: | Line 128: |
=== Gadfly数据库 === Gadfly是一个用python语言实现的简单的关系型数据库系统,基于SQL结构化查询语言。它被包含在karrigell当中。安装以及如何在python脚本中使用它的教程,在gadfly-1.0.0/doc目录提供的有。基本上,你所要做的就是打开一个终端窗口,改变到gadfly-1.0.0目录,然后执行: |
|
Line 108: | Line 131: |
* 阶段性任务 学习karrigell |
{{{ python setup.py install }}} 注意对Unix用户,安装它你必须具有root权限。更多内容参考installation.txt,尤其是第四节的如何加速,如果你是windows用户的话,还有SQL入门书gadfly.txt。 |
Line 111: | Line 136: |
(先记在这里,将win2kpro的i386下的setupp.ini中的第二行最后三个数字改为270,安装时就不用输入序列号了 * 哈哈哈!欢迎分享 [wiki:self/KarrigellQuickIn Karrigell] 的体验!!! 不过上面这技巧是怎么发现的?描述一下子故事哪 -- ZoomQuiet |
尽管它在执行效率、稳定性、处理并发访问等方面无法与MySQL或PostGreSQL相比,但对karrigell的目标(通信量适中的简单站点,不太可能使用大容量数据)来说它应当是个很好的选择。 |
Line 114: | Line 138: |
== 预定完成 == * 当日计划任务... 3.4 配置文件 |
=== 存储对象 === 程序编写者的一个常见任务是存储和检索数据库中的对象。使用面向对象的编程语言象python,需要在对象的名称、属性与表中列的名称与类型之间做以转换。 |
Line 118: | Line 141: |
配置选项在配置文件中设定。默认为服务器目录中的Karrigell.ini。你可以在命令行把它设为其它的文件。 | 假定你有个person类是这样定义的: |
Line 120: | Line 143: |
配置文件分为几个部分: | {{{ class Person: def __init__( self, name, surname, age, info ): self.name = name self.surname = surname self.age = age self.info = info def show( self ): print "%s, %s (%s) - %s" \ % ( self.name, self.surname, self.age, self.info ) }}} 在存储类的实例到gadfly中之前,你必须先创建一个表: |
Line 122: | Line 156: |
[Directories] | {{{ cx = gadfly.gadfly() cx.startup( "persons" ) sql = "CREATE TABLE Person ( name varchar, surname varchar, age integer, info varchar )" cursor = cx.cursor() cursor.execute( sql ) }}} 然后,对于每个Person实例,你还要这样做: |
Line 124: | Line 165: |
root | {{{ p = Person( 'caulfield', 'holden', 18, 'catcher in the rye' ) vals = 'name="%s", surname="%s", age=%s, info="%s"' % ( p.name, p.surname, p.age, p.info ) sql = 'INSERT INTO Person (%s)' % vals cursor.execute( sql ) cx.commit() }}} 要检索名字匹配“caulfield”的对象,代码可能会是这样: |
Line 126: | Line 174: |
设置root选项为根目录的完整路径,你从那里发布文档。初始安装这一项没有设定,默认为服务器目录。 | {{{ sql = 'SELECT name, surname, age, info FROM Person WHERE name="caulfield"' cursor.execute(sql) result=cursor.fetchall()[0] p=Person(res[0], res[1], res[2], res[3]) }}} == 关于自定义root目录 == 文档中说只要编辑Karrigell.ini中[Directories]段的root选项,并且使用绝对路径就可以了,象这样: |
Line 128: | Line 183: |
protected | {{{ root = /home/rocker/project }}} 事实上,只这样改是不行的,还要把Karrigell自带的admin目录复制到你新的root目录,对于上例,就是project目录下。不然的话 |
Line 130: | Line 188: |
受保护目录列表;对于这些目录中的每个脚本,执行前都会先执行一个叫AuthentScript.py的脚本。这个AuthentScript.py必须由管理员创建并放进目录。 | {{{ python Karrigell.py }}} 会报错。 |
Line 132: | Line 193: |
默认,只有admin目录是受保护的。用“;”分割来添加更多的目录。 | 这当中的具体原因,我还不清楚,但是这样做肯定就行了。以后你再 |
Line 134: | Line 195: |
allow_directory_listing 如果一个url对应的目录没有index文件,由本项来决定谁可以看这个目录的内容: all = 所有人 none = 没有人 admin = 只有管理员 - 它的登录密码由admin目录中的k_password.py来配置。 默认值是“admin”。 [Applications] 映射扩展名的MIME类型;据我所知这可以在Netscape上工作,但IE上不行。 [Alias] 你可以为某个目录指定一个别名。例如,如果你创建这个别名:scripts = C:\My Documents\Karrigell scripts,那么http://localhost/scripts/index.htm这个url就会访问c:\My Documents\Karrigell scripts\index.htm这个文件。 [Server] port 设置服务器端口(默认为80) debug 这个选项指定debug级别。如果设置为1,所有被导入的模块在每次导入时都会被重置,所以如果你改动了某个被导入的脚本你也不必重启服务器。 silent 如果这个选项被设置为1,控制台窗口就不打印任何消息。 gzip 如果这个选项被设置为1,并且用户代理支持gzip编码(大多数浏览器支持),服务器压缩发送给用户代理的数据。这减少用户网络负荷,但多少会增加一点服务器的负荷。 global 这个选项指定所有脚本运行时需要导入的模块的路径。如果有这样一行: global = %(base)s/myScript.py; %(base)s/myScript.py 则myScript和myScript模块都可以在所有脚本的名称空间中可用。 ignore 如果找不到就忽略的url列表(返回HTTP代码204而不是404)。默认忽略/favicon.ico。 [Translation] 指定应用程序使用的语言,无论浏览器的该选项是什么。如果不想做任何转译,就设置为lang=default,如果想使用英语,设置为lang=en,以此类推。 装载配置文件前karrigell设定了一个基本变量,它的值是服务器目录。参考默认配置文件Karrigell.ini中的%(base)s/。 5.编程 在karrigell中编程有几中风格: *纯粹的python脚本,有一点不同,里面嵌有html *karrigell服务,可以处理整个站点 *象PHP那样,将python代码嵌入HTML 它们都会在这份文档中被描述,它们都使用同样的方式访问HTTP环境和表单域。 5。1 访问HTTP环境 HTTP环境访问可以通过脚本名称空间中的全局变量来完成: *HEADERS 是关于HTTP头的一个字典:键是头名称,值是头信息的值。例如HEADERS[‘ACCEPT-LANGUAGE']将返回accept-language头部信息 |
{{{ http://localhost }}} 打开的就是你新的root目录中的文件了。 |
Rockety的 Karrigell 使用体验
1. Karrigell
1.1. 配置文件
配置选项在配置文件中设定。默认为服务器目录中的Karrigell.ini。你可以在命令行把它设为其它的文件。
配置文件分为几个部分:
1.1.1. [Directories]
root
设置root选项为根目录的完整路径,你从那里发布文档。初始安装这一项没有设定,默认为服务器目录,即指向为Karrigell/webapps/,这个选择你大可不必设置,因为是默认的。
protected
受保护目录列表;对于这些目录中的每个脚本,执行前都会先执行一个叫AuthentScript.py的脚本。这个AuthentScript.py必须由管理员创建并放进目录。
默认,只有admin目录是受保护的。用“;”分割来添加更多的目录。
allow_directory_listing
如果一个url对应的目录没有index文件,由本项来决定谁可以看这个目录的内容:
all = 所有人 none = 没有人 admin = 只有管理员 - 它的登录密码由admin目录中的k_password.py来配置。
默认值是“admin”。
1.1.2. [Applications]
映射扩展名的MIME类型;据我所知这可以在Netscape上工作,但IE上不行。
1.1.3. [Alias]
你可以为某个目录指定一个别名。例如,如果你创建这个别名:scripts = C:\My Documents\Karrigell scripts,那么http://localhost/scripts/index.htm这个url就会访问c:\My Documents\Karrigell scripts\index.htm这个文件。
这外功能很有意思,可以将你的服务器目录与开发目录分开,同时又不至于影响你的工作。
1.1.4. [Server]
port
设置服务器端口(默认为80),建议使用这个选择,如果你的系统里还安装了Apache,如果直接运行python Karrigell.py,就是不能不启动服务器了,Karrigell.ini使用这个port设置功能后,会指向一个8081的服务器端口。
当然,你也可以不开启,但在启动服务器后,要指明端口:
python Karrigell.py -P 8081
debug
这个选项指定debug级别。如果设置为1,所有被导入的模块在每次导入时都会被重置,所以如果你改动了某个被导入的脚本你也不必重启服务器。
silent
如果这个选项被设置为1,控制台窗口就不打印任何消息。
zip
如果这个选项被设置为1,并且用户代理支持gzip编码(大多数浏览器支持),服务器压缩发送给用户代理的数据。这减少用户网络负荷,但多少会增加一点服务器的负荷。
global
这个选项指定所有脚本运行时需要导入的模块的路径。如果有这样一行:
global = %(base)s/myScript.py; %(base)s/myScript.py
则myScript和myScript模块都可以在所有脚本的名称空间中可用。
ignore
如果找不到就忽略的url列表(返回HTTP代码204而不是404)。默认忽略/favicon.ico。
1.1.5. [Translation]
指定应用程序使用的语言,无论浏览器的该选项是什么。如果不想做任何转译,就设置为lang=default,如果想使用英语,设置为lang=en,以此类推。
装载配置文件前karrigell设定了一个基本变量,它的值是服务器目录。参考默认配置文件Karrigell.ini中的%(base)s/。
1.2. 设置MySQL与SQLite
1.2.1. [密码设置]
Karrigell提供了两种默认的数据库支持,即MySQL和SQLite,我试用了下MySQL,能连接到数据库,并自动生成数据库,并能像phpMyAdmin那样管理数据库,同时还能根据所提供的数据库,自动生成py程序代码,感觉很爽。 通过简单的设置,这些功能就能使用了。 在Karrigell中的admin目录中,执行下面的命令:
python k_password.py
输入用户名及密码,如root,123。
1.2.2. [使用方法]
在浏览器中输出:
http://localhost:8000/InstantSite/mysql/index.ks/index
这些就能看到MySQL的数据库登录界面,输入出MySQL的服务器名称(一般为localhost),用户名及密码,就可以进入数据库进行操作了。
1.3. 编程
在karrigell中编程有几中风格:
- 纯粹的python脚本,有一点不同,里面嵌有html
- karrigell服务,可以处理整个站点
- 象PHP那样,将python代码嵌入HTML
它们都会在这份文档中被描述,它们都使用同样的方式访问HTTP环境和表单域。
1.3.1. 访问HTTP环境
HTTP环境访问可以通过脚本名称空间中的全局变量来完成:
- HEADERS
print HEADERS
将会得到:
{'accept-language': 'zh-cn,zh;q=0.5', 'accept-encoding': 'gzip,deflate', 'keep-alive': '300', 'accept': 'text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5', 'user-agent': 'Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.7.12) Gecko/20050919 Firefox/1.0.7', 'accept-charset': 'gb2312,utf-8;q=0.7,*;q=0.7', 'connection': 'keep-alive', 'cookie': 'sessionId=XWPqs2hw', 'host': 'localhost'}
- RESPONSE
大小写不敏感
{'Content-Type': 'text/html'}
2. 在gadfly数据库中存储对象
Python脚本可以存储和检索数据库中的数据,无论是关系型数据库(象MySQL、PostGreSQL、SQLite)、对象数据库(象ZODB)还是其它类型的数据库(MetaKit、KirbyBase),只需使用适当的模块即可(参考http://www.python.org/cgi-bin/moinmoin/DatabaseProgramming)。这些产品某些时候需要下载、安装以及学习如何使用它们。为了让这些变得简单,Karrigell基于gadfly数据库提供了一种完整的存储解决方案。
2.1. Gadfly数据库
Gadfly是一个用python语言实现的简单的关系型数据库系统,基于SQL结构化查询语言。它被包含在karrigell当中。安装以及如何在python脚本中使用它的教程,在gadfly-1.0.0/doc目录提供的有。基本上,你所要做的就是打开一个终端窗口,改变到gadfly-1.0.0目录,然后执行:
python setup.py install
注意对Unix用户,安装它你必须具有root权限。更多内容参考installation.txt,尤其是第四节的如何加速,如果你是windows用户的话,还有SQL入门书gadfly.txt。
尽管它在执行效率、稳定性、处理并发访问等方面无法与MySQL或PostGreSQL相比,但对karrigell的目标(通信量适中的简单站点,不太可能使用大容量数据)来说它应当是个很好的选择。
2.2. 存储对象
程序编写者的一个常见任务是存储和检索数据库中的对象。使用面向对象的编程语言象python,需要在对象的名称、属性与表中列的名称与类型之间做以转换。
假定你有个person类是这样定义的:
class Person: def __init__( self, name, surname, age, info ): self.name = name self.surname = surname self.age = age self.info = info def show( self ): print "%s, %s (%s) - %s" \ % ( self.name, self.surname, self.age, self.info )
在存储类的实例到gadfly中之前,你必须先创建一个表:
cx = gadfly.gadfly() cx.startup( "persons" ) sql = "CREATE TABLE Person ( name varchar, surname varchar, age integer, info varchar )" cursor = cx.cursor() cursor.execute( sql )
然后,对于每个Person实例,你还要这样做:
p = Person( 'caulfield', 'holden', 18, 'catcher in the rye' ) vals = 'name="%s", surname="%s", age=%s, info="%s"' % ( p.name, p.surname, p.age, p.info ) sql = 'INSERT INTO Person (%s)' % vals cursor.execute( sql ) cx.commit()
要检索名字匹配“caulfield”的对象,代码可能会是这样:
sql = 'SELECT name, surname, age, info FROM Person WHERE name="caulfield"' cursor.execute(sql) result=cursor.fetchall()[0] p=Person(res[0], res[1], res[2], res[3])
3. 关于自定义root目录
文档中说只要编辑Karrigell.ini中[Directories]段的root选项,并且使用绝对路径就可以了,象这样:
root = /home/rocker/project
事实上,只这样改是不行的,还要把Karrigell自带的admin目录复制到你新的root目录,对于上例,就是project目录下。不然的话
python Karrigell.py
会报错。
这当中的具体原因,我还不清楚,但是这样做肯定就行了。以后你再
http://localhost
打开的就是你新的root目录中的文件了。