searoom
SHTML 教程
Searoom 发表于 2008-10-06 08:39:08
什么是 SHTML
使用SSI(Server Side Include)的html文件扩展名,SSI(Server Side Include),通常称为“服务器端嵌入”或者叫“服务器端包含”,是一种类似于ASP的基于服务器的网页制作技术。
SSI工作原理:
将内容发送到浏览器之前,可以使用“服务器端包含 (SSI)”指令将文本、图形或应用程序信息包含到网页中。例如,可以使用 SSI 包含时间/日期戳、版权声明或供客户填写并返回的表单。对于在多个文件中重复出现的文本或图形,使用包含文件是一种简便的方法。将内容存入一个包含文件中即可,而不必将内容输入所有文件。通过一个非常简单的语句即可调用包含文件,此语句指示 Web 服务器将内容插入适当网页。而且,使用包含文件时,对内容的所有更改只需在一个地方就能完成。
因为包含 SSI 指令的文件要求特殊处理,所以必须为所有 SSI 文件赋予 SSI 文件扩展名。默认扩展名是 .stm、.shtm 和 .shtml。
Web 服务器在处理网页的同时处理 SSI 指令。当 Web 服务器遇到 SSI 指令时,直接将包含文件的内容插入 HTML 网页。如果“包含文件”中包含 SSI 指令,则同时插入此文件。除了用于包含文件的基本指令之外,还可以使用 SSI 指令插入文件的相关信息(如文件的大小)或者运行应用程序或 shell 命令。
网站维护常常碰到的一个问题是,网站的结构已经固定,却为了更新一点内容而不得不重做一大批网页。SSI提供了一种简单、有效的方法来解决这一问题,它将一个网站的基本结构放在几个简单的HTML文件中(模板),以后我们要做的只是将文本传到服务器,让程序按照模板自动生成网页,从而使管理大型网站变得容易。
所以,利用SHTML格式的页面目的和 ASP 差不多,但是因为是 API 所以运转速度更快,效率更高,比ASP快,比HTML慢,但由于可以使用服务器端包含,因此使页面更新容易(特别是批量更新banner,版权等),想象一下吧,你有一段 HTML,要在中间穿插一些特殊的服务端脚本,比如插入其他 HTML 段落,你选择 ASP 来完成这个任务,但是如果任务更繁重,需要更多的时间,比如 5 s,这个时候你不用 ASP 而用 SHTML,或许处理时间就只用 4s 了。
SSI有什么用?
之所以要扯到 SSI,是因爲 Shtml - Server-Parsed HTML 的首字母缩略词。包含有嵌入式服务器方包含命令的 HTML 文本。在被传送给浏览器之前,服务器会对 SHTML 文档进行完全地读取、分析以及修改。shtml和asp 有一些相似,以shtml命名的文件里,使用了ssi的一些指令,就像asp中的指令,你可以在SHTML文件中写入SSI指令,当客户端访问这些shtml文件时,服务器端会把这些SHTML文件进行读取和解释,把SHTML文件中包含的SSI指令解释出来比如:你可以在SHTML文件中用SSI指令引用其他的html文件(#include ),服务器传送给客户端的文件,是已经解释的SHTML不会有SSI指令。它实现了HTML所没有的功能,就是可以实现了动态的SHTML,可以说是HTML的一种进化吧。像新浪的新闻系统就是这样的,新闻内容是固定的但它上面的广告和菜单等就是用#include引用进来的。
目前,主要有以下几种用用途:
- 显示服务器端环境变量<#echo>
- 将文本内容直接插入到文档中<#include>
- 显示WEB文档相关信息<#flastmod #fsize> (如文件制作日期/大小等)
- 直接执行服务器上的各种程序<#exec>(如CGI或其他可执行程序)
- 设置SSI信息显示格式<#config>(如文件制作日期/大小显示方式)
高级SSI<XSSI>可设置变量使用if条件语句。
使用SSI
SSI是为WEB服务器提供的一套命令,这些命令只要直接嵌入到HTML文档的注释内容之中即可。如:
<!--#include file="info.htm"-->
就是一条SSI指令,其作用是将"info.htm"的内容拷贝到当前的页面中,当访问者来浏览时,会看到其它HTML文档一样显示info.htm其中的内容。其它的SSI指令使用形式基本同刚才的举例差不多,可见SSI使用只是插入一点代码而已,使用形式非常简单。当然,如果WEB服务器不支持SSI,它就会只不过将它当作注释信息,直接跳过其中的内容;浏览器也会忽略这些信息。
如何在我的WEB服务器上配置SSI功能?
在一些WEB服务器上(如IIS 4.0/SAMBAR 4.2),包含 #include 指令的文件必须使用已被映射到 SSI 解释程序的扩展名;否则,Web 服务器将不会处理该SSI指令;默认情况下,扩展名 .stm、.shtm 和 .shtml 被映射到解释程序(Ssinc.dll)。
Apache则是根据你的设置情况而定,修改srm.conf如:
AddType text/x-server-parsed-html .shtml 将只对.shtml扩展名的文件解析SSI指令
AddType text/x-server-parsed-html .html 将对所有HTML文档解析SSI指令
Netscape WEB服务器直接使用 Administration Server(管理服务器)可打开SSI功能。
Website 使用 Server Admin 程序中的 Mapping 标签,扩展名添加内容类型为:wwwserver/html-ssi
Cern 服务器不支持SSI,可用SSI诈骗法,到 http://sw.cse.bris.ac.uk/WebTools/fakessi.html 上下载一个PERL脚本,即可使你的CERN服务器使用一些SSI指令。(不支持exec指令。)
SSI指令基本格式
程序代码:
<!-- 指令名称="指令参数">
示例:
<!--#include file="info.htm"-->
说明:
-
<!-- -->是HTML语法中表示注释,当WEB服务器不支持SSI时,会忽略这些信息。
-
#include 为SSI指令之一。
-
file 为include的参数, info.htm为参数值,在本指令中指将要包含的文档名。
注意:
-
<!--与#号间无空格,只有SSI指令与参数间存在空格。
-
上面的标点="",一个也不能少。
-
SSI指令是大小写敏感的,因此参数必须是小写才会起作用。
SSI指令使用详解
#echo 示范
作用:将环境变量插入到页面中。
语法:
<!--#echo var="变量名称"-->
示例:
<!--#echo var="DOCUMENT_NAME"--> 本文档名称
<!--#echo var="DATE_LOCAL"--> 现在时间
<!--#echo var="REMOTE_ADDR"--> 你的IP地址
#include 示范
作用:将文本文件的内容直接插入到文档页面中。
语法:
<!--#include file="文件名称"-->
<!--#include virtual="文件名称"-->
file 文件名是一个相对路径,该路径相对于使用 #include 指令的文档所在的目录。被包含文件可以在同一级目录或其子目录中,但不能在上一级目录中。如表示当前目录下的的nav_head.htm文档,则为file="nav_head.htm"。
virtual 文件名是 Web 站点上的虚拟目录的完整路径。如表示相对于服务器文档根目录下hoyi目录下的nav_head.htm文件;则为file="/hoyi/nav_head.htm"
参数:
file 指定包含文件相对于本文档的位置
virtual 指定相对于服务器文档根目录的位置
注意:
- 文件名称必须带有扩展名。
- 被包含的文件可以具有任何文件扩展名,我觉得直接使用htm扩展名最方便,微软公司推荐使用 .inc 扩展名(这就看你的爱好了)。
示例:
<!--#include file="nav_head.htm"--> 将头文件插入到当前页面
<!--#include file="nav_foot.htm"--> 将尾文件插入到当前页面
#flastmod 和 #fsize 示范
作用:
#flastmod 文件最近更新日期
#fsize 文件的长度
语法:
<!--#flastmod file="文件名称"-->
<!--#fsize file="文件名称"-->
参数:
file 指定包含文件相对于本文档的位置 如 info.txt 表示当前目录下的的info.txt文档
virtual 指定相对于服务器文档根目录的位置 如 /hoyi/info.txt 表示
注意:文件名称必须带有扩展名。
示例:
<!--#flastmod file="news.htm"--> 将当前目录下news.htm文件的最近更新日期插插入到当前页面
<!--#fsize file="news.htm"--> 将当前目录下news.htm的文件大小入到当前页面
#exec 示范
作用:将某一外部程序的输出插入到页面中。可插入CGI程序或者是常规应用程序的输入,这取决于使用的参数是cmd还是cgi。
语法:
<!--#exec cmd="文件名称"-->
<!--#exec cgi="文件名称"-->
参数:
cmd 常规应用程序
cgi CGI脚本程序
示例:
<!--#exec cmd="cat /etc/passwd"--> 将会显示密码文件
<!--#exec cmd="dir /b"--> 将会显示当前目录下文件列表
<!--#exec cgi="/cgi-bin/gb.cgi"--> 将会执行CGI程序gb.cgi。
<!--#exec cgi="/cgi-bin/access_log.cgi"--> 将会执行CGI程序access_log.cgi。
注意:从上面的示例可以看出,这个指令相当方便,但是也存在安全问题。
禁止方法:
-
Apache,将access.conf中的"Options Includes ExecCGI"这行代码删除;
-
在IIS中,要禁用 #exec 命令,可修改 SSIExecDisable 元数据库;
#config
作用: 指定返回给客户端浏览器的错误信息、日期和文件大小的格式。
语法:
<!--#config errmsg="自定义错误信息"-->
<!--#config sizefmt="显示单位"-->
<!--#config timefmt="显示格式"-->
参数:
errmsg 自定义SSI执行错误信息,可以为任何你喜欢的方式。
sizefmt 文件大小显示方式,默认为字节方式("bytes")可以改为千字节方式("abbrev")
timefmt 时间显示方式,最灵活的配置属性。
示例:显示一个不存在文件的大小
<!--#config errmsg="服务器执行错误,请联系管理员 yiho@126.com,谢谢!"-->
<!--#fsize file="不存在的文件.htm"-->
以千字节方式显示文件大小
语法:
<!--#config sizefmt="abbrev"-->
<!--#fsizefile="news.htm"-->
以特定的时间格式显示时间
<!--#config timefmt="%Y年/%m月%d日 星期%W 北京时间%H:%M:%s,%Y年已过去了%j天 今天是%Y年的第%U个星期"-->
<!--#echo var="DATE_LOCAL"--> 显示今天是星期几,几月,时区
<!--#config timefmt="今天%A, %B ,服务器时区是 %z,是"-->
<!--#echo var="DATE_LOCAL"-->
XSSI
XSSI(Extended SSI)是一组高级SSI指令,内置于Apache 1.2或更高版本的mod-include模块之中。其中可利用的的指令有:
#printenv
#set
#if
#printenv
作用: 显示当前存在于WEB服务器环境中的所有环境变量。
语法:
<!--#printenv-->
#set
作用:可给变量赋值,以用于后面的if语句。
语法:
<!--#set var="变量名" value="变量值"-->
示例:
<!--#set var="color" value="红色"-->
#if
作用:创建可以改变数据的页面,这些数据根据使用if语句时计算的要求予以显示。
语法:
<!--#if expr="$变量名=\"变量值A\""-->
显示内容
<!--#elif expr="$变量名=\"变量值B\""-->
显示内容
<!--#else-->
显示内容
<!--#endif"-->
示例:
<!--#if expr="$SERVER_NAME=\"www.baidu.com\""-->
欢迎光临 http://www.baidu.com
<!--#elif expr="$SERVER_NAME=\"www.google.com\"" -->
欢迎光临 http://www.google.com
<!--#else-->
欢迎光临 Afly's Blog!
<!--#endif"-->
注意:用于前面指令中的反斜杠,是用来代换内部的引号,以便它们不会被解释为结束表达式。不可省略。
1、Config 命令
Config 命令主要用于修改SSI的默认设置。其中:
Errmsg:设置默认错误信息。为了能够正常的返回用户设定的错误信息,在HTML文件中Errmsg参数必须被放置在其它SSI命令的前面,否则客户端只能显示默认的错误信息,而不是由用户设定的自定义信息。
<!--#config errmsg="Error! Please email webmaster@mydomain.com" -->
Timefmt:定义日期和时间的使用格式。Timefmt参数必须在echo命令之前使用。
<!--#config timefmt="%A, %B %d, %Y"-->
<!--#echo var="LAST_MODIFIED" -->
显示结果为:
Wednesday, April 12, 2000
也许用户对上例中所使用的%A %B %d感到很陌生,下面我们就以表格的形式总结一下SSI中较为常用的一些日期和时间格式。
Sizefmt:决定文件大小是以字节、千字节还是兆字节为单位表示。如果以字节为单位,参数值为"bytes";对于千字节和兆字节可以使用缩写形式。同样,sizefmt参数必须放在fsize命令的前面才能使用。
<!--#config sizefmt="bytes" -->
<!--#fsize file="index.html" -->
2、Include 命令
Include 命令可以把其它文档中的文字或图片插入到当前被解析的文档中,这是整个SSI的关键所在。通过Include命令只需要改动一个文件就可以瞬间更新整个站点!
Include 命令具有两个不同的参数:
Virtual:给出到服务器端某个文档的虚拟路径。
File:给出到当前目录的相对路径,其中不能使用"../",也不能使用绝对路径。
<!--#include virtual="/includes/header.html" -->
<!--#include file="header.html" --> 这就要求每一个目录中都包含一个header.html文件。
3、Echo 命令
Echo 命令可以显示以下各环境变量:
DOCUMENT_NAME:显示当前文档的名称。
DOCUMENT_URI:显示当前文档的虚拟路径。例如:
<!--#echo var="DOCUMENT_NAME" -->
<!--#echo var="DOCUMENT_URI" -->
随着网站的不断发展,那些越来越长的URL地址肯定会让人头疼。如果使用SSI,一切就会迎刃而解。因为我们可以把网站的域名和SSI命令结合在一起显示完整的URL,即:
http://YourDomain<!--#echo var="DOCUMENT_URI" -->
QUERY_STRING_UNESCAPED:显示未经转义处理的由客户端发送的查询字串,其中所有的特殊字符前面都有转义符"\"。例如:
<!--#echo var="QUERY_STRING_UNESCAPED" -->
DATE_LOCAL:显示服务器设定时区的日期和时间。用户可以结合config命令的timefmt参数,定制输出信息。例如:
<!--#config timefmt="%A, the %d of %B, in the year %Y" -->
<!--#echo var="DATE_LOCAL" -->
显示结果为:
Saturday, the 15 of April, in the year 2000
DATE_GMT:功能与DATE_LOCAL一样,只不过返回的是以格林尼治标准时间为基准的日期。例如:
<!--#echo var="DATE_GMT" -->
LAST_MODIFIED:显示当前文档的最后更新时间。同样,这是SSI中非常实用的一个功能,只要在HTML文档中加入以下这行简单的文字,就可以在页面上动态的显示更新时间。
<!--#echo var="LAST_MODIFIED" -->
CGI环境变量
除了SSI环境变量之外,echo命令还可以显示以下CGI环境变量:
SERVER_SOFTWARE:显示服务器软件的名称和版本。例如:
<!--#echo var="SERVER_SOFTWARE" -->
SERVER_NAME: 显示服务器的主机名称,DNS别名或IP地址。例如:
<!--#echo var="SERVER_NAME" -->
SERVER_PROTOCOL:显示客户端请求所使用的协议名称和版本,如HTTP/1.0。例如:
<!--#echo var="SERVER_PROTOCOL" -->
SERVER_PORT:显示服务器的响应端口。例如:
<!--#echo var="SERVER_PORT" -->
REQUEST_METHOD:显示客户端的文档请求方法,包括GET, HEAD, 和POST。例如:
<!--#echo var="REQUEST_METHOD" -->
REMOTE_HOST:显示发出请求信息的客户端主机名称。
<!--#echo var="REMOTE_HOST" -->
REMOTE_ADDR:显示发出请求信息的客户端IP地址。
<!--#echo var="REMOTE_ADDR" -->
AUTH_TYPE:显示用户身份的验证方法。
<!--#echo var="AUTH_TYPE" -->
REMOTE_USER:显示访问受保护页面的用户所使用的帐号名称。
<!--#echo var="REMOTE_USER" -->
4、Fsize:显示指定文件的大小,可以结合config命令的sizefmt参数定制输出格式。
<!--#fsize file="index_working.html" -->
5、Flastmod:显示指定文件的最后修改日期,可以结合config 命令的timefmt参数控制输出格式。
<!--#config timefmt="%A, the %d of %B, in the year %Y" -->
<!--#flastmod file="file.html" -->
这里,我们可以利用flastmod参数显示出一个页面上所有链接页面的更新日期。方法如下:
<!--#config timefmt=" %B %d, %Y" -->
<A HREF="/directory/file.html">File</A>
<!--#flastmod virtual="/directory/file.html" -->
<A HREF="/another_directory/another_file.html">Another File</A>
<!--#flastmod virtual="/another_directory/another_file.html" -->
显示结果为:
File April 19, 2000
Another File January 08, 2000
6、Exec
Exec命令可以执行CGI脚本或者shell命令。使用方法如下:
Cmd:使用/bin/sh执行指定的字串。如果SSI使用了IncludesNOEXEC选项,则该命令将被屏蔽。
Cgi:可以用来执行CGI脚本。例如,下面这个例子中使用服务端cgi-bin目录下的counter.pl脚本程序在每个页面放置一个计数器:
<!--#exec cgi="/cgi-bin/counter.pl" -->
关于SHTML和HTML的区别
让我们先来看看SHTML和HTML的区别,如果用一句话来解释就是:SHTML 不是HTML而是一种服务器 API,shtml是服务器动态产成的html.
虽然两者都是超文本格式,但shtml是一种用于SSI技术的文件。也就是Server Side Include--SSI 服务器端包含指令。如果Web Server有SSI功能的话,大多数(尤其是基于Unix平台)的WEB服务器,如Netscape Enterprise Server等均支持SSI命令。
KarriGell小结
Searoom 发表于 2008-10-04 12:03:24
1、什么是?
KarriGell是个轻型web框架,使用python实现。
2、如何使用?
从here下 载Karrigell,解压后即可使用,超级绿色。自带服务器也很方便,另也能和Apache很好结合。后,进入Karrigell所在目录,,运行 python Karrigell.py,在浏览器中输入localhost,即可看到Karrigell自带文档及入门手册。
Karrigell服务器有个配置文件,conf/Karrigell.ini,一般设置端口,别名,路径等
Karrigell.ini文件详解
具体字段含义如下:
[Directories]
root
设置root选项为根目录的完整路径,你从那里发布文档。初始安装这一项没有设定,默认为服务器目录,即指向为Karrigell/webapps/,这个选择你大可不必设置,因为是默认的。
protected
受保护目录列表;对于这些目录中的每个脚本,执行前都会先执行一个叫AuthentScript.py的脚本。这个AuthentScript.py必须由管理员创建并放进目录。
默认,只有admin目录是受保护的。用“;”分割来添加更多的目录。
allow_directory_listing
如果一个url对应的目录没有index文件,由本项来决定谁可以看这个目录的内容:
all = 所有人
none = 没有人
admin = 只有管理员 - 它的登录密码由admin目录中的k_password.py来配置。
默认值是“admin”。
[Applications]
映射扩展名的MIME类型;据我所知这可以在Netscape上工作,但IE上不行。
[Alias]
你 可以为某个目录指定一个别名。例如,如果你创建这个别名:scripts = /home/shengyan/mysite,那么http://localhost/scripts/index.htm这个url就会访问/home /shengyan/mysite/index.htm这个文件。
这一功能很有意思,可以将你的服务器目录与开发目录分开,同时又不至于影响你的工作。
[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。
[Translation]
指定应用程序使用的语言,无论浏览器的该选项是什么。如果不想做任何转译,就设置为lang=default,如果想使用英语,设置为lang=en,以此类推。
装载配置文件前karrigell设定了一个基本变量,它的值是服务器目录。参考默认配置文件Karrigell.ini中的%(base)s/。
3、开发?
第一个主要是.pih文件,是html嵌入python方式,类似jsp。另外很方便的是,也可以直接.py文件中,输出html代码。
第二个是利用.ks文件,这个同样是python代码,可以把之前多个.pih页面写在一个.ks文件中,就可以实现整个网站功能。
4、优点 vs 缺点?
- 开发非常快速,结构清晰,很python化
- 小巧轻便,随你怎么用都没关系
- 没有url机制,路径不清晰,带参数
- 自己写的代码比较多,整一个从无到有的过程,不过自己很清楚在做什么
- 开发出来的页面比较朴素,要显示的好看则比较麻烦
- 。。。
如果刚开始比较熟悉其他python/web框架的话,可能会不怎么习惯KarriGell的开发方式,呵呵~至少我是的。不过嘛,习惯了,就发现各有各的好阿。同时也发现,不管是什么框架,大同小异的,只要真正去学,耐心去学,怎么可能学不会。
6、相关学习资料
Karrigell官方网站
Karrigell官方文档
Karrigell官方入门教程
Karrigell中文版官方文档
Karrigell初步安装及运行
Karrigell.ini配置详细参考
关于Karrigell的二三事
总之,学到很多,接下来就想要用起来并不断加深~
主动,耐心,思考,多练,调节
Karrigell Web框架开发简介
Searoom 发表于 2008-10-03 16:18:07
|
Python script (hello.py)
|
Karrigell service (hello.ks)
|
|
print "Hello, world !"
|
def index():
print "Hello, world !" |
|
HTML Inside Python (hello.hip)
|
Python Inside HTML (hello.pih)
|
|
"Hello, world !"
|
Hello, world !
|
|
CGI script (hello.py
in folder cgi-bin) |
|
|
print "Content-type: text/html"
print "Hello, world !" |
|
如果要想像这样写一些Python代码的话,例如打印0到9的数字序列:
|
Python script
|
Karrigell service
|
|
print "<h1>Squares</h1>"
for i in range(10):
print "%s :<b>%s</b>" %(i,i*i)
|
def index():
print "<h1>Squares</h1>"
for i in range(10):
print "%s :<b>%s</b>" %(i,i*i)
|
|
HTML Inside Python
|
Python Inside HTML
|
|
"<h1>Squares</h1>"
for i in range(10):
"%s :<b>%s</b>" %(i,i*i)
|
<h1>Squares</h1>
<%
for i in range(10):
print "%s :<b>%s</b>" %(i,i*i)
%>
|
|
CGI script
|
|
|
print 'Content-type: text/html'
print
print "<h1>Squares</h1>"
for i in range(10):
print "%s :<b>%s</b>" %(i,i*i)
|
|
-
可以使用普通的Python脚本
-
Karrigell services是一种Python脚本,它的每一个函数都匹配一个不同的URL:foo.ks/bar匹配foo.ks脚本中的bar()函数(如果没有指定函数,默认使用index()函数)
-
HTML inside Python是另一种写Python脚本的方式,在运行时当遇到print语句就会把要输出的字符串发送给客户端浏览器
-
Python inside HTML是一种非常像ASP,JSP,PHP的写法,Python写在HTML页面<的% %>标记中
-
还可以直接使用CGI脚本:参见文档的cgi module章节
Python代码在一个包含HTTP环境,表单字段,自定义异常的命名空间下运行。当一个表单包括字段<INPUT name="myfield">,它的值可以在脚本中使用_myfield来得到。
在身份认证和Session方面,可以在脚本中使用两个叫做Authentication和Session的函数来处理。Authentication的第一个参数是一个测试函数,用来检查是否接受输入的AUTH_USER和AUTH_PASSWORD。Session()用来初始化一个session对象并设置或读取它的属性值或者得到一个session。
Include(file_or_script)函数在当前脚本插入脚本或者文件的输出结果;例如它可用在页头或者页尾。
用python和karrigell做网站.
Searoom 发表于 2008-10-03 16:08:37
从今天起,和大家一起学习用python/karrigell做网站.
对于能搜到这篇文章的兄弟,一定是对karrigell是什么有大致的了解了,但是如果不知道也没关系.这个单词虽然很复杂,而且金山词霸不知道该怎么解释,但实际上的意思却很简单.
karrigell,一个支持用python开发web程序的框架,说的再白一些,就是一个可以解释python脚本的web服务器.如果你用python写了一个网页,直接点击浏览肯定出错,因为虽然你的机器上装了python运行环境,但这个环境并不是特别为web开发设计.但是如果你再在机器上装一个karrigell,那在去浏览这个网页,大事可成.
简单了解了karrigell是怎么回事,接下来说的深刻一些,karrigell的功能大致有:
提供多种不同的方法来让你使用python开发web页面
提供多种web特性服务(比如session)
本身是一个web服务器,可以解释执行web页面,但也可以和其他web服务器结合(比如Apache)
本身提供了一个小型的数据库用来和python网页交互,但也可以使用其他数据库(比如mysql)
那么我们为什么要学习karrigell来作为"使用python进行web程序开发"的入门功课呢?原因只有两个字:简单.
karrigell安装简单,使用简单,学习简单...因此,你可以轻松的就步入python+web的世界(当然,我也只是初学者,最后这句话也是我的美好愿望^_^)
开始本次旅行还剩下最后一个问题:什么是python?
http://www.cnblogs.com/notus/archive/2007/09/28/909674.html
(只是开玩笑,但如果你真的不知道,那 orz)
1.安装karrigell
到这里来下载最新的karrigell,我现在用的是2.3.6
http://karrigell.sourceforge.net/
下载后,解压缩,把文件夹放到一个容易发现的目录,比如我是把他们放在这里 C:\Karrigell236
至此,karrigell的安装就完毕了.(真的完毕了,就这么简单)
2.启动karrigell服务
到文件夹里找到Karrigell.py,双击它.如果没有问题,会显示如下的pyton command line窗口
---------------------------------------
Karrigell 2.3.6 running on port 80
Debug level 1
Press Ctrl+C to stop
----------------------------------------
这就表示,Karrigell服务已经启动,现在,你可以运行python网页了.
3.karrigell服务的主目录
默认的web主目录是在C:\Karrigell236\webapps
在浏览器上键入http://localhost,就可以打开"welcome to Karrigell"这个页面,实际上这个页面是目录里的index.html
有点迷惑的是,如果你的机器上还跑着其他的web服务器,比如iis,那karrigell就会强占http://localhost这个url.我的意思是说,在没装karrigell前你用http://localhost会打开你指定的某个网站目录,但是装了karrigell后这个地址就会显示为karrigell的欢迎页而不是先前那个.
这个问题我们以后肯定会解决.
4.karrigell的配置
我们熟悉的比如iis,会有详细且亲切的配置管理.但是karrigell就只能通过目录下的Karrigell.ini文件进行配置.打开后可以对诸如Karrigell使用的端口,主目录进行配置.比如要解决上面的问题,我是给Karrigell指定了一个非80的端口
port=6001
这样,下次运行Karrigell时就会使用6001端口,相应的,你访问Karrigell主目录就需要这样http://localhost:6001/
5.网页的编辑
这是个很重要的问题,我们罗唆了半天都是为了做个网站.现在据我所知,Karrigell除了支持html等文件外,还可以支持.py和.pih扩展名的文件.前一个很明显就是python程序,后面这个按照我现在的理解就是一种特殊的用html代码和python混合编写而成的网页.现在不了解不要紧,以后会知道的.
6.第一个python网页
现在,让我们在C:\Karrigell236\webapps下建立一个hello.py,并输入那行伟大的代码
print 'hello world!'
保存后用http://localhost:6001/hello.py访问,页面显示如下:
------------------
hello world!
------------------
你人生中第一个python网页就这样诞生了...
7.其他资源
打开karrigell的欢迎页,会在上面发现很多有用的资源,比如示例,文档,邮件列表,等等等等.
如果你就是喜欢看中文,我今天挖到一个好东西,csdn上某好心人用中文翻译的karrigell文档.
http://blog.csdn.net/chumpklutz/
另外这篇文章也不错,是对karrigell的简单概括的介绍,我们的下一步,说不定就是把这个文章翻译成中文的.
http://www.devshed.com/c/a/Python/Karrigell-for-Python/
本文章肯定会是系列文章,除非我哪天早上起来后发现自己对python不感兴趣了.
希望可以和大家一起进步!
引用自:http://bbs.blueidea.com/thread-2800533-1-1.html
使用iis6解释/运行python
Searoom 发表于 2008-10-03 15:29:57
已经在用win2003服务器,不想在装apache或其他的东西而又想尝鲜python的朋友,现在,你可以使用iis直接运行python网站!
上面的话像广告。下面的话则像技术文档。
使用iis来解释python
原理:
iis实际上是一部手机,你插入移动的卡,就用移动打电话,插入联通的卡,就用联通打电话,如果你插入的是python的卡,那就用python打电话。
步骤:
- 打开iis
-这步的意思就是:把冰箱门打开...
1.打开iis6
- 配置web服务扩展,也就是把python卡插入手机
--这一步的意思是注册你用来解释python的程序。稍后会用你注册的这个程序来解释你的python网页。
2.在Web Service Extensions节点右键,选择“Add a new Web service extensions”.
3.在打开的对话框中填入Ectension name,然后点击Required files栏的add按钮,找到你python的安装目录,选中python.exe,然后按下面格式填写
D:\Python25\python.exe -u %s %s (我的python装在了D:\Python25\),不要遗漏后面的 -u %s %s, 并注意空格
5.选中set extension status to allowed
6.点击完成,完成这个步骤
- 配置你的python页面的扩展名,这相当于...大家说相当于什么-_-
-这一步的意思就是说当用户请求某个特定扩展名的网页时,iis用什么去解释这个网页。比如用户浏览.aspx网页,iis知道用isapi。
7.点击web sites节,找到你要执行python的那个网站,点右键,点properties
8.在打开的对话框中选中home directory页,点击Configuration...按钮
9,在打开的Application Configuration对话框,application extensions栏目下,点击add按钮
10.弹出的add/edit application extension mapping对话框
11.像刚才一样找到你的python.exe,然后按照这个格式填到excutable
"D:\Python25\python.exe" -u %s %s 注意要加引号
12.在 extension栏填入想要使用的扩展名
13.在verbs里填入想要允许用户执行的操作,比如我只填一个GET。你可以根据自己的需要填,这方面的资料另外搜索吧:)
14.点击完成,完成这个步骤.
接下来就试验下吧。理论上说任何的python脚本都可以执行
最后是疑难解答:
1.找不到网页。
明明在目录里有这个文件,但是却显示找不到。这个错误的发生是因为你用iis5的配置方法来配置ii6了,遗漏了配置扩展那一步。
2.CGI Error
The specified CGI application misbehaved by not returning a complete set of HTTP headers.
这个错误的发生...恩,每个python网页在一开始都需要用print输出一个空行,就是这样
print
如果不这样做,就会出错。
大体的位置可以是这样
#-*-code:gb2312-*-
import feedparser
notus=feedparser.parse('http://song2.blogbus.com/index.rdf')
style='''<style>
body{
font-size:12px;
color:#777777
}
</style>'''
print 'Content-type: text/html'
print
print '<HTML><HEAD><TITLE>hey!</TITLE>'
print style
print '</HEAD>'
也就是说,在你的html代码前。
happy pythoning :)
