收藏 分享(赏)

Python Web框架 Karrigell官方中文文档.pdf

上传人:精品资料 文档编号:10897310 上传时间:2020-01-19 格式:PDF 页数:33 大小:1.22MB
下载 相关 举报
Python Web框架 Karrigell官方中文文档.pdf_第1页
第1页 / 共33页
Python Web框架 Karrigell官方中文文档.pdf_第2页
第2页 / 共33页
Python Web框架 Karrigell官方中文文档.pdf_第3页
第3页 / 共33页
Python Web框架 Karrigell官方中文文档.pdf_第4页
第4页 / 共33页
Python Web框架 Karrigell官方中文文档.pdf_第5页
第5页 / 共33页
点击查看更多>>
资源描述

1、Karrigell 官方文档 ( 中文版 ) Karrigell官方文档(中文版)ChumpKlutz原创翻译PDF 版由 wwq0327 制作原文地址:http:/ 官方文档 ( 中文版 ) 内容目录原文地址:http:/ Karrigell. 33. The Web server. 33.1 The Root Directory. 33.2 Serving static files 33.3 Command line options45. Karrigell with Apache, lighttpd and Xitami. 76.1 Accessing HTTP environment7

2、6.2 Form fields. 86.3 Smart urls. 86.4 File uploads 96.5 Exceptions.106.6 HTMLStream .107. Debugging117.1 Debug mode . 117.2 Error handling and debugging 118. Python scripts .139. CGI scripts.14New in version 2.3.1 1410.1 Syntax1410.2 Smart urls1511.1 Python variables 1611.2 Strings for translation

3、1711.3 Indentation.1711.3.1 Basics.1711.3.3 The tag. 1811.4 PIH as a templating system. 1911.5 Debugging.1913. HTMLTags - generate HTML in Python.2014.1 Namespace 2214.2 Passing parameters2215. Sessions. 2315.1 Example 2316.2 The RestrictToAdmin() function 2517. Internationalization and Unicode 2617

4、.1 Translation 2617.2 Unicode support27New in version 2.2.22718. Karrigell namespace. 28Karrigell 官方文档 ( 中文版 ) 1. Introduction Karrigell是一个用Python写的简单的Web解决方案。它被设计的简单易用:集成web server和数据库(PyDbLite),可以通过简单的方式访问环境变量和表单字段,但是Karrigell的功能仍然很强大:Python脚本在服务器的同一个进程被执行,服务器页面可以包含HTML和Python代码(就像PHP,JSP,ASP),简单的

5、身份验证,session管理,国际化等。Karrigell也可以同其它web server一齐工作,像Apache,Xitami和LightTPD都被Karrigell支持。并且当前流行的数据库(sqlite,MySql,PostGresQL,等)都可以通过相关的Python API在Karrigell中使用。Karrigell的分发包里自带有一组示例文件,包括一个Wiki server,一个论坛,一个blog引擎和一个portal。2.Installing Karrigell首 Python 的 方 并 一个2.3 版本的Python。然 的Karrigell 文件解 一个文件 c:Karr

6、igell,然 进 个 Karrigell-2.3.5的文件 , 个文件 服务器文件 。行Karrigell,进 服务器文件 然 制 行:(server dir)Karrigell-2.3.5python Karrigell.py currency1:Karrigell 2.3.5 running on port 80 Debug level 1 Press Ctrl+C to stop 在浏览器中输入http:/localhost,我们会看到Karrigell的主页。我建议设置管理员用户名和密码:它们可用于许多程序,包括可用来管理Mysql或sqlite数据库。因此我们打开控制台窗口然后进入

7、admin文件夹运行script k_password.py (server dir)Karrigell-2.3.5/adminpython k_password.py 然后输入用户名和密码。3. The Web server默认内置的web server是异步的,就像Python的标准模块asyncore 和 asynchat。经过我测试后,发现它们很好用响应速度很快。3.1 The Root Directory根目录是用来 URL ; myfile.htm 根目录 http:/myhost/myfile.htm 来 myhost是 (是localhost).currency1Karrige

8、ll,“默认是fi器fl的webapps 。我们可置文件来 设置。3.2 Serving static files在Karrigell”用文件(HTML文件,GIF或JPEG像, )我们可”用 的建然后它们在“。设我们 建HTML文档 myFile.htm它在“,然后打开我们的浏览器输入d: http:/myhost/myFile.htm,我们就可看到文件 在浏览器 。我们文件在 , 我们就 它 名 : 文件myImage.gif在 Images,我Karrigell 官方文档 ( 中文版 ) 们就可 http:/myhost/Images/myImage.gif。 文件在“ ,我就用到 名

9、。 文件名 是 , fi器 会index.html,index.htm,index.py,index.pih,index.hip或index.ks。 到就会打 的 和文件, 到多index文件 会 发异。在 文件的 名,fi器就会文件可 的 名html,htm,py,pih,hip或ks。 到,文件就会 到多文件名的文件, 会 发异 文件到会 发异。3.3 Command line options行是:python Karrigell.py - port -S -D initFile 参数: port是HTT 的端口号(默认是80) S 代表silent模式:默认 Karrigell打印出收到

10、 每一 请求 跟踪信息。使用S选项 将不会打印出来。 D 设置调试等级为1 initFile是一 配置 。默认 是服务器目录下 Karrigell.ini 。 4. Configuration options有的“都设在一个“文件里,fifl的是服务器目录 的Karrigell.ini文件, 可以在 行一个同的文件。变量base在 “文件前设Karrigell的,它的就是服务器目录。可以Karrigell.ini文件里使用%(base)s/的地方。“文件被分成”个分:Directoriesroot设root 目录的 ,它是 访问文件的 目录。在 是有被设的,fifl是服务器目录 的webapp

11、s。cgiCgi scripts的目录表。fifl是服务器目录 的webapps/cgi-bin目录。protected它的是一组被的目录在 目录里都 有一个 AuthentScript.py的脚本,在访问 目录首 执行个脚本。 个脚本是 admin目录 的AuthentScript.py制过的。Karrigell 官方文档 ( 中文版 ) fifl的 admin目录。可以使用分目录。allow_directory_listing一个URL有index文件 “ 一个目录, 个用决 用 可以 个目录的内容: all = all users none = no user fifl是none 。hi

12、de_extensions文件被 能访问( 一个403 )。hide_paths一个 “url的 表 式 “成功服务器 403 。它可以用 访问一组目录。例 一个 cvs的版本制的目录并且 访问,可以 设:hide_paths = .*/cvs/.*loggingFile文件。 有设,服务器就录。loggingParameters 理器的数,可以 Python的logging 文。Applications 文件 MIME 它 在Netscape里有用,Internet Explorer 设。Alias 可以 一个 关 文件 的一个 。例 , 创 一个 :scripts=c:My Documen

13、tsKarrigell scripts然 访问htpp:/localhost/scripts/index.htm 实际上访问的是c:My DocumentsKarrigell scriptsindex.html PS:有点 似于IIS里的虚拟目录,但也完一 。Serverport设port用改变HTTP端(fifl是80)。Karrigell 官方文档 ( 中文版 ) reload_modules设 1,有import的 在每次import重import,因此 在改变import的脚本需 重启动服务器。fifl是1.debugdebug示是否 在 页面显示Debug 按钮。 可能 的原因 它设

14、 0.fifl是1(显示debug按钮)。silentsilent设 1,那么制将 印任何东西。gzipgzip设 1,并且用 代理支持gzip编码(大多数的浏览器都支持),服务器将 发送 用 代理的数据。减少用 的 流量但是服务器损失一 效能。global在global中,可以 的 它 在 行Karrigell是被import。 可以像 设一行:global=%(base)s/myScript.py;%(base)s/myScript1.pymyScript和myScript1 将在 空间里可以被有的脚本使用。ignore当有找 被忽略的一组url表( HTTP代码204代替404).Tra

15、nslation 应用程序使用的 , 忽略web浏览器里的设。 想任何转换可以设lang=default, 想转换成英可以设lang=en,等。VirtualHost nameKarrigell支持虚拟主机的概念,允许在相同的服务器上使用同的字访问同的主机。一个虚拟主机 像 面 在“文件里 一行:VirtualHost namename是主机的字(像www.test.org)在 个分, 个的主机接收请求访问一个目录:root = /web/mydirKarrigell 官方文档 ( 中文版 ) 5. Karrigell with Apache, lighttpd and Xitami未完成6.

16、 Programming在Karrigell中有好”种写程序的方式: 纯Python脚本,使用简单的变量,还有HTML Inside Python Karrigell Services方式, 是一个Python脚本它可以 理整个 点( 者一 分页面) 像PHP一 混和HTML与代码的方式,即Python Inside HTML 同的编程方式都使用相同的方式访问HTTP环境变量和表单数据, 都在 面的文里分 描述。也可以使用其它”种受支持的脚本: 想使用.foo管理脚本, 可以写一个 作mod_foo的 。可以使用mod_tmpl.py管理Cheetah 板 管理的例子。6.1 Accessin

17、g HTTP environment在Karrigell脚本 行的字空间里提供通过局变量访问HTTP环境变量: HEADERS是一个带有HTTP头数据的字典:它的健是头字,是相应头的。比 HEADERS“accept-language“将 accept-language头 RESPONSE是一个用设响应头以发送 服务器端的字典。 个字典键的字是区 大小写的:RESPONSEContent-type与RESPONSECONTENT-type 同的结 AUTH_USER和AUTH_PASSWORD是用于身份fl证的 COOKIE是一个与Python的Cookie 中的SimpleCookie对象相

18、同的字典,它储的cookies随着HTTP请求被web浏览器发送 服务器端 SET_COOKIE是另一个SimpleCookie对象, 可以设它的键和它将被当作cookies储在客 端的浏览器中 ACCEPTED_LANGUAGES是一个客 端浏览器可接受的 表,它按优 顺序排序。表中的都是据ISO 639规范使用两个字符的字符串标识一种 ( en代表English,fr代表French,等) 在 级的应用中,REQUEST_HANDLER代表当前RequestHandler实例。它暴露出一 属性 client_address它使用一个 元组表示客 端的IP地址和端。Karrigell 官方文

19、档 ( 中文版 ) Python标准分发包文中的BaseHTTPServer和SimpleHTTPServer THIS是一个代表当前脚本的脚本 的实例 6.2 Form fieldsQUERY 是一个字典变量代表着当使用HTTP GET方法 HTTP POST方法提交表单数据的 询字符串。QUERY的键字就是表单中的字段,它的就是字符串形式的字段,当字段以 结尾使用表表示字段的(比 一个表单字段)假设 有 一个HTML表单:Spam DogCatFrog在myScript.py中input字段将 被显示:print “Spam is “,QUERY“spam“if QUERY.has_key

20、(“animal“):print “Animal is “,str(QUERY“animal“)可以通过一种快捷方式访问 数据,即使用_与字段组合。 面的代码将像写:print “Spam is “,_spamif QUERY.has_key(“animal“):print “Animal is “,str(_animal)使用 划线是 避免字段与Python 字 相同的 字 6.3 Smart urls通 一个脚本里 数是在url里使用 询字符串 者post数据, 另一种是 数作 url的一分 ,就像http:/host/path/script.py/foo/bar ,里的数就是foo和ba

21、r在脚本里 可以通过一个表访问 数,它是THIS的一个属性即THIS.subpath:print “The parameters are %s“ %THIS.subpathKarrigell 官方文档 ( 中文版 ) 个url在的问 是当 使用Include 写一个相关的 接 一个 像 JavaScript, 用 个脚本有使用subpath subpath中有一 数 url 有同.例 在脚本里写 一个相关的url:print 然 用 个脚本http:/host/path/script.py/foo/bar,浏览器将计 对 ,点 个 接:http:/host/path/script.py/foo

22、/images/pic.png,使用数foo,images,pic.png执行相同的脚本显然 是 想 的。因此 计划在一个子 里 一个数,将 像 写相关的url:print %THIS.upTHIS.up代表着有多少数就有多少个字符串/也可以使用baseurl属性,它将 当前的 path/6.4 File uploads客 端上 一个文件 服务器端,表单中的input标 有一个 file的。比 有一个表单像 :File to process: 那个脚本使用变量QUERYmyfile _myfile 理 上 的文件,它是cgi 内 FieldStorage的一个实例。个对象有两个属性:filen

23、ame:文件的字 file:一个像file的对象可用 文件的内容例 想在服务器端的文件 使用相同的文件文件:import osf = _myfile.file # filelike objectdest_name = os.path.basename(_myfile.filename)out = open(dest_name,wb)Karrigell 官方文档 ( 中文版 ) # copy fileimport shutilshutil.copyfileobj(f,out)out.close()6.5 Exceptions在Karrigell的Python脚本中可以 发 的 理脚本SCRIPT

24、_END当 想 发送数据 浏览器 想 脚本执行 文件 尾可以使用 个 。 个 在 脚本 想 它个地方 行以 脚本 变量 有用myVar=10.print myVarraise SCRIPT_END. (rest of code - wont be run)SCRIPT_ERROR使用raise SCRIPT_ERROR,msg 脚本的执行并出msgHTTP_ERRORraise HTTP_ERROR,(errorCode,errorMessage)将currency1Karrigell使用一个 的 代码和currency1发送一个HTTP currency1HTTP_REDIRECTIONra

25、ise HTTP_REDIRECTION,url将currency1Karrigell重一个请求 一个“的URL6.6 HTMLStream HTMLStream是HIP 里面的一个 它比重使用print 容易。它的设计像HTML Inside Python但使用同的实方式创 个 的一个实例:import HIPH = HIP.HTMLStream()然 使用“+“和“-“ 印数据 标准出:使用“+“数据将当作字符串被 印出,使用“-“将使用cgi-escaped式出aDict=“one“:“unan“,“two“:“daou“,“three“:“tri“Karrigell 官方文档 ( 中文

26、版 ) H + aDict - type(aDict)它 和 面的代码是一 的:aDict=“one“:“unan“;“two“:“daou“;“three“:“tri“print str(aDict),cgi.escape(type(aDict)7. Debugging7.1 Debug mode 当 fi版本程序, 重 改变 的 通 有 形。fl 性能的原因,标准Python解器 编译过的版本, 它的代码是否改过可以设“文件里的reloadModules 1,它强制 个 一次改的版本一 个程序 式工作 , 可以设它的 式 07.2 Error handling and debugging当

27、 用一个URL发 ,将在浏览器里显示一个 用currency1包括以 ”个分: 用的url 在一个表里显示 发的地方:也有可能显示的是脚本代码 是一个字 “的url,在 种 一是 发在使用Include()”数被包含的脚本里。 显示一个的结。表里显示脚本字, 字,在 脚本里的行与在行的文本 未 过 理的Python 用 “文件里的debug设 1还显示一个“Debug“按钮例 :Error in /demo/errors/ErrorInIncludedTest1.py/demo/errors/ErrorInIncludedTest1.pyincludes /demo/errors/ErrorI

28、nIncludedTest2.pyScript /demo/errors/ErrorInIncludedTest1.pyNameError: name bonjour is not definedLine 1 Karrigell 官方文档 ( 中文版 ) print Script 1Traceback (most recent call last):File “C:cygwinhomeKarrigellTemplate.py“, line 153, in renderexec self.pythonCode() in nsFile “, line 1, in ?NameError: name

29、bonjour is not defined点 个“Debug“按钮 还可以 关于 个 的 多currency1: 法 显示代码,并且在 发的地方 显示 一个环境变量的 , 可以在 个 里浏览并 找变量的和”数 方法的代码等 :Karrigell 官方文档 ( 中文版 ) 想 用 currency1, 可以设“文件里的debug 08. Python scripts 在Karrigell中 行Python脚本是 简单的。 的Python代码编器创 面的脚本:print “Hello Karrigell !“然 它在Root Directory 面的hello.py里。然 访问http:/loc

30、alhost/hello.py, 就可以在浏览器里 currency1Python脚本在Karrigell里是以通的脚本方式 行的,它接受print 发送数据 客 端浏览器 是制。因此 需 以 当的式写HTML代码一个简单的表 可以 写:print “print “print “Name“print “Address“print “print “者使用Python多行 法:print “NameAddress“者 使用HTMLTags :from HTMLTags import *print TABLE(TR(TD(“Name“)+TD(“Address“) 想 脚本在karrigell里 行

31、 可以在脚本的 端包含 段代码:try:SCRIPT_ENDexcept NameError:passelse:print “This script cant be executed by Karrigell“Karrigell 官方文档 ( 中文版 ) raise SCRIPT_END(. rest of your script here .)SCRIPT_END在Python脚本的 行字空间里那就是 行在Karrigell里,在 个 就结 执行 行执行就 发NameError 并且忽略 理的脚本9. CGI scriptsNew in version 2.3.1 在另一个环境上 发CGI脚

32、本, 可以 过改就能 行在Karrigell上。提:在Karrigell 2.3.1里CGI脚本 能 行在 服务器里,将在以 其它服务器的支持需 CGI脚本在一个 的目录里。fifl的是webapps/cgi-bin目录, 也可以设“文件里Directories 的cgi其它的 10. Karrigell Services 10.1 Syntax“Karrigell Services“也是一种Python脚本它可以 理一 URL,因此由同的HTML页面组成的一个完整的服务可以创 在一个脚本文件里。的目的,在Karrigell Service中的一个”数就 着一个URL:在脚本dump.ks中的

33、”数foo()可以 用dummy.ks/foo。用方法foo(arg1,arg2),URL 像 dummy.ks/foo?arg1=val1Karrigell 官方文档 ( 中文版 ) 有一个实例表, 能使用sum(instanceList) 接items因 sum 能带”个数。因此 像 用Sum完成 个工作:Sum( TR(TD(i)+TD(i*i) for i in range(100) )上面的代码成一个有0-99个 方形的行。innerHTML可以是一个字符串,但是 能 接一个字符串和一个HTML 实例,像 :H1(To be or + B(not to be)实上面的功能,可以使用T

34、EXT ,它成任何标 :H1(TEXT(To be or ) + B(not to be)一个简单的文可以 写:print HTML( HEAD(TITLE(Test document) +BODY(H1(This is a test document)+TEXT(First line)+BR()+TEXT(Second line)将产 :Test documentThis is a test documentFirst lineSecond line文比 , 好的可 性可以 一个一个的创 元素 ,然 它 整个的印出。例 :stylesheet = LINK(rel=“Stylesheet“,

35、href=“doc.css“)header = TITLE(Record collection)+stylesheettitle = H1(My record collection)rows = Sum (TR(TD(rec.title,Class=“title“)+TD(rec.artist,Class=“Artist“) for rec in records)table = TABLE(TR(TH(Title)+TH(Artist) + rows)print HTML(HEAD(header) + BODY(title + table)Karrigell 官方文档 ( 中文版 ) 14.

36、Including other documents or scripts在一个脚本中可以通过Karrigell使用Include(url)”数包含一个静文件的内容 一个脚本文件的出,url是那个文件 脚本的地址(也可以使用通文件的 )。当 想利用有的页面创 一组页面 有用,在同的页面中显示同的内容(例 一个页头和/ 页脚)。 的脚本可以通过 :Include(“authenticationTest.py“) # a script testing user authenticationInclude(“header.htm“) # a static file with a title, styl

37、e sheet etc(. your script body .)Include(“footer.py“) # a script which will print current date for instance在 行,当出 归引用(脚本包含自己 脚本1包含脚本2 脚本2 包含脚本1)Karrigell 发RecursionError 。14.1 Namespace在被 用的脚本中 的变量与 用它的脚本在 行在同一字空间里。 用脚用是:name=“Brian“print “The life of “Include(“whoseName.py“)whoseName.py的代码是:print n

38、ame将 name变量在 用脚本里是可以使用的。14.2 Passing parameters也可以 数 一个被 用的脚本:可以个 portal例的menu脚本。 个脚本带有一个菜单表数和一个 “的url的表数。它将通过 种方式被包含:Labels=.Urls=.Include(“k_menu.hip“,labels=Labels,urls=Urls,targetUrl=“index.pih“)数也可以通过追 在url 的 询字符串 :使用Include(“/mypath/aScript.pih?data=dummy“)aScript.pih中的变量data在当前字空间里将是可用的。Karri

39、gell 官方文档 ( 中文版 ) 15. SessionsSession是用在服务器端内中一个用 一个页面 另一个页面相关currency1的机制。假设 在一个 上发并想购买两张CD,然 在另一个页面上发 一本。然 被询问关于住址currency1, 是一个礼物还发送一个currency1,然 可能问 的用卡。 fl购买 就出一个页面显示有的currency1。有sessions 是很实的,那 每次都 上一次的currency1 一个 的表单字段, 是很实的。有 sessions一切变 容易每个用 都带有一个“session identifer“标识每次服务发送请求都在表单 一个cookie

40、。 个标识符 “服务器端的一个对象可以设 它的属性。在Karrigell中,在页面中 想改 访问sessioncurrency1,首 创 一个session对象:sessionObj=Session() 一个 ,Karrigell就成一个 sessionId的cookie并被发送 web浏览器。在 面的请求浏览器自动的发送 个cookie并且服务器端也寻找与之相关的对象。session对象是一个通的Python对象, 可以设它的属性:sessionObj.name=“John Doe“在另一个脚本 可以访问它的:name=sessionObj.nameSession对象支持一个close()方

41、法,它currency1sessioncurrency1丢失。 显示的关 一个session,Karrigell 多于1000个session当 1000个session被创 它就除间 久的那个session.15.1 Example在一个HTML文件里创 一个表单然 发送 一个PIH脚本:Who are you ?Name First name 面的脚本将通过QUERY 者表单字段变量 的,创 一个session对象并且 name和firstname作 个对象的属性。Karrigell 官方文档 ( 中文版 ) Begin sessionNext.一个脚本有使用 询字符串,但它仍然可以通过s

42、ession对象 currency1:Session test goes on因 上面的脚本关 session, 上一页然 再一次点 Next. 接 将 一个Python的 用告诉 session有firstname属性。改上面的脚本删除 session.close() 一行发 么。16. Authentication 16.1 Basic HTTP authenticationKarrigell 支持 本的HTTP身份验证,一种方式就是通过 求用 和密码一 文件的访问。服务器在接受 用 它在局变量AUTH_USER 和AUTH_PASSWORD中。 用 的 被验证 服务器就发送一个页面, 有

43、被验证用 就被 求重 用 和密码, 用 消 就 的currency1。在Karrigell中,身份验证是通过Authentication”数 理的, 用Authentication( testFunction , realm , errorMessage ) where testFunction is a user-defined function taking no argument, which returns true if the authentication test succeeds (depending on the values of AUTH_USER and AUTH_PASSWORD) and false otherwise, realm is a string with the name of the authentication domain (the one that will appear

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报