Karrigell 入門

原文:http://www.devshed.com/c/a/Python/Karrigell-for-Python/

因爲python並不是特別爲web開發而生,所以現在很多的python使用者都在開發能夠讓python運行于web的框架.Karrigell就是現在爲數衆多的python/web框架之一.本文將對Karrigell做簡要的介紹.

簡介

Karrigell是一個功能強大且靈活的python/web框架,爲web開發提供了多種解決方案.並且,很重要的,它的安裝和使用都非常的簡單.即使是python的初學者,也不會在使用Karrigell的時候犯迷糊,並且Karrigell也沒有因爲結構簡單而限制python的一些特性.它提供了自己的web服務器完成工作,但是也非常容易的和其他的web服務器(例如apache)結合工作,所以如果你選擇了Karrigell,你仍然可以使用之前一直在使用的web服務器.

這篇文章將從Karrigell的安裝開始說起,介紹數個Karrigell的重要特性.

安裝Karrigell

上面說了,Karrigell的安裝一點都不麻煩.你要做的第一步是到SourceForge下載最新的Karrigell,當你下載了zip包後,將其解壓縮到一個容易找到的目錄.然後直接雙擊Karrigell.py啓動Karrigell的內置web服務器.如果你現在並不想把Karrigell和其他的web服務器結合使用,那Karrigell的安裝到此就結束了.

但如果你想要設置你的web服務器來和Karrigell結合,我們拿apache來舉例子.我們現在需要Karrigell在apache的後台運行,來使apache將相關的請求傳送給Karrigell

因爲apache一般會運行在80端口,你需要給Karrigell設置一個其他的運行端口.有兩個方法來達到這個目的,其一是使用命令行來完成,或者可以改變Karrigell的配置文件.先來看如何用命令行,我們將在8080端口運行Karrigell.

C:\Karrigell>Karrigell.py -P 8080

第二種,你需要找到Karrigell.ini,然後加上這麽一句

port=8080

現在你需要配置apache將有關的請求轉向到Karrigell.一般來說,你希望apache可以處理任何的靜態文件請求,比如php.你可以和apache共享同一個路徑, 也可以設立單獨的路徑..然後設置那些文件需要apache把請求傳遞給Karrigell,你需要添加下面的內容到apache的 httpd.conf 文件.

RewriteEngine On

RewriteRule ^/(.*).py(.*) 1.py$2]http://localhost:8080/$1.py$2 [L,P]

RewriteRule ^/(.*).ks(.*) 1.ks$2]http://localhost:8080/$1.ks$2 [L,P]

RewriteRule ^/(.*).hip(.*) 1.hip$2]http://localhost:8080/$1.hip$2 [L,P]

RewriteRule ^/(.*).pih(.*) 1.pih$2]http://localhost:8080/$1.pih$2 [P]

如果你想, 你可以設置全部的特定文件請求都轉給Karrigell.在本文中,我們將使用testarea這個路徑,所以我們這樣設置httpd.conf:

RewriteEngine On

RewriteRule ^/testarea(.*) 1]http://localhost:8080/testarea$1 [P]

當然你可以這樣:

RewriteEngine On

RewriteRule ^/testarea/(.*).py(.*)
1.py$2]http://localhost:8080/testarea/$1.py$2 [L,P]

RewriteRule ^/testarea/(.*).ks(.*)
1.ks$2]http://localhost:8080/testarea/$1.ks$2 [L,P]

RewriteRule ^/testarea/(.*).hip(.*)
1.hip$2]http://localhost:8080/testarea/$1.hip$2 [L,P]

RewriteRule ^/testarea/(.*).pih(.*)
1.pih$2]http://localhost:8080/testarea/$1.pih$2 [P]

Scripts和Services

Python scripts和Karrigell services將是python開發者使用Karrigell最容易接觸的兩個概念.Python scripts就是python的腳本,開發者使用print語句輸出到用戶浏覽器的內容.如果你還不明白,建立一個testarea目錄,然後我們將開始創建我們的第一個Python scripts.新建一個文件test.py:

print "<center>"

print "Hello!"

print "<br /><br />"

print "Karrigell is configured and working."

print "</center>"

在浏覽器中打開這個文件,如果之前你的Karrigell都正確設置,那你將會看到輸出的內容.

Python scripts也可以容易的使用表單.讓我們再來創建一個簡單的頁面,用戶可以在這個頁面輸入自己的名字.新建文件askname.py:

if QUERY.has_key ( "name" ):

print "Your name is", _name + "."

else:

print "What is your name?<br />"

print "<form>"

print "<input type='text' name='name' /><br />"

print "<input type='submit' value='Proceed' />"

print "</form>"

Karrigell services的編寫和Python scripts類似.這個的作用是映射請求到用戶指定的方法.指定方法的名字通過跟在Karrigell services後面進行傳遞.比如,下面這個url將會調用test這個方法
http://localhost/testarea/test.ks/test

讓我們實際編寫下這個例子

def index():

print "Index function."

def test():

print "Test function."

如果不傳遞方法名而使用這些Python scripts,你的程序會默認執行index方法.如果傳遞了方法名test,那test方法就會被調用.調用一個不存在的方法會抛出異常.

使用Karrigell services來處理表單傳遞的數據也很簡單.讓我們來創建一個ascname.ks

def index():

print "What is your name?<br />"

print "<form action='nameSubmit'>"

print "<input type='text' name='name' /><br />"

print "<input type='submit' value='Proceed' />"

print "</form>"

def nameSubmit ( name ):

print "Your name is", name + "."

當然,允許外部公開訪問你的方法是一件很危險的事情,爲了阻止不允許的用戶訪問你的方法,按照下面所述給你的方法加前綴:

def _private():

pass

嘗試訪問_private方法將會抛出異常.

使用HIP

在askname.py,有一件事情值得注意,這個代碼镉刑嗟膒rint語句.如果可以不使用print而直接輸出,那將會是一件多麽好的事情.幸運的是,Karrigell提供了這樣的功能.這被稱爲HTML Inside Python,這將清除所有討厭的print語句.並且從askname.py到TML Inside Python的轉換也非常容易.我們只是需要移走那些print語句.刪除askname.py裏的print並將文件重命名爲askname.hip

f QUERY.has_key ( "name" ):

"Your name is", _name + "."

else:

"What is your name?<br />"

"<form method='POST'>"

"<input type='text' name='name' /><br />"

"<input type='submit' value='Proceed' />"

"</form>"

這就是HTML Inside Python.Karrigell將會檢查你的文件並自動在需要的地方添加print.HTML Inside Python是Karrigell簡單易學的一個有力證明.

Python Inside HTML

Karrigell提供了HTML

Inside Python,那自然的,也會提供Python Inside HTML.和一般的做法一樣,將python語句寫在特殊的標記裏,然後把最終結果發送到用戶的浏覽器.讓我們來創建一個簡單的示例,random.pih

<% import random %>

Random number: <b><% print random.random() %></b>

正如你說看到的,Python Inside HTML的概念如此的簡單.而其實,代碼塊可以更加的簡單:

<%= random.random() %>

但是,如果處理更複雜的邏輯,比如處理表單數據?表單數據可以像在Python scripts中被處理那樣被處理.這是有一個askname.py的複制品askname.pih

<% if QUERY.has_key ( "name" ): %>

Your name is <%= _name %>.

<% end %>

<% else: %>

What is your name?<br />

<form method='POST'>

<input type='text' name='name' /><br />

<input type='submit' value='Proceed' />

</form>

<% end %>

請注意<% end %>的使用.這將標識代碼塊的結尾,就像上面我們的條件語句的縮進一樣.另一個可選擇的辦法是使用indent標簽,這個也被用來標識代碼縮進.

<indent>

<% if QUERY.has_key ( "name" ): %>

Your name is <%= _name %>.

<% else: %>

What is your name?<br />

<form method='POST'>

<input type='text' name='name' /><br />

<input type='submit' value='Proceed' />

</form>

</indent>

更多的特性

我們來這樣試一下,標簽可以通過Python scripts這樣使用,tagtest.py

rom HTMLTags import *

print CENTER ( B ( "Test." ) )

session同樣可以在Karrigell被處理,並且Karrigell還提供了一個良好的接近于面向對象的session機制.讓我們創建一段簡單的代碼來示範Karrigell中的session.回到我們的第一個例子,用戶將會獲得一個幸運數字.如果用戶刷新頁面,該數字仍然存在,因爲這個數字將被保存在sessin中.當然,用戶將可以選擇重新獲取新的幸運數字,這通過關閉sessin來完成.創立一個名爲luckynumber.ks的Karrigell services,輸入下面的代碼:

import random

user = Session()

def index():

if not "luckyNumber" in dir ( user ):

user.luckyNumber = random.randint ( 0, 20 )

print "Your lucky number:", user.luckyNumber

print "<br /><br />"

print "<a href='reset'>Reset Lucky Number</a>"

def reset():

user.close()

print "Your lucky number has been reset."

print "<br /><br />"

print "<a href='index'>Back</a>"

結論

Karrigell提供了四種方法來進行web開放,Python scripts,Karrigell services,HTML Inside Python和Python Inside HTML,每種方法都有其特點,但是他們卻都有一個共同的優點:使用簡單.Karrigell 將web開發變成了一件優雅,簡單的事情.無論是單獨使用Karrigell還是和apache結合使用,都是令人吃驚的簡單.因爲,無論是對于初學者,還是老手,Karrigell都是不錯的選擇.

千元內學生首選 低價入門級智能機推薦
千元內學生首選 低價入門級智能機推薦
隨著“快樂暑假君”的離開,“悲催開學君”的到來,廣大的莘莘學子也已經重返校園,開始了自己新學期的學習生活。那麽剛剛回到校園的學子們是否考慮下爲自己購置一部新手機呢?現在小編爲學生朋友們推薦幾款千元左右...查看完整版>>千元內學生首選 低價入門級智能機推薦
 
入門到旗艦全覆蓋 4K元內C網手機大搜羅
入門到旗艦全覆蓋 4K元內C網手機大搜羅
第1頁:中興N600+如今的手機市場已經是接近飽和,市場上手機的種類也已經非常豐富,各式各樣的手機都能找到,選擇什麽樣子的手機,配什麽樣的網絡都成了大家比較關心的問題。在今天的導購當中,筆者專門針對C網手機進...查看完整版>>入門到旗艦全覆蓋 4K元內C網手機大搜羅
 
三星入門Android機僅售1000元 超值學生機薦
三星入門Android機僅售1000元 超值學生機薦
每到7月份的時候都是各大學校放暑假的日子,辛苦一年的學生朋友們終于可以利用這個難得的假期好好休息休息一下了。而在這個畢業的季節,許多同學也都會考慮更換手機,既然是學生,那麽經濟來源就是有限的,因此在選購手機...查看完整版>>三星入門Android機僅售1000元 超值學生機薦
 
門檻越降越低 三網Android入門機推薦
門檻越降越低 三網Android入門機推薦
導語:隨著Android機型數量的不斷增多,許多廠商不斷的加入到Android手機大戰當中來,這個“機器人”也不再是剛問世時的無人問津狀態,而是變得十分火熱。所以機型的增多最直接的影響就是降低了Android手機的售價門檻...查看完整版>>門檻越降越低 三網Android入門機推薦
 
諾基亞X3領銜 千元內入門超值手機精選
諾基亞X3領銜 千元內入門超值手機精選
在現今的社會中手機已經成爲生活的必需品,手機的性能也是差距很大,有的高配置手機接近萬元的價格,讓我們這些貧民百姓望而卻步,小編特地精選了7款千元以內的手機推薦給大家,讓大家感受實用而且時尚的高性價比低價...查看完整版>>諾基亞X3領銜 千元內入門超值手機精選
 
諾基亞新機僅售1380元 近期超值入門手機薦
諾基亞新機僅售1380元 近期超值入門手機薦
不管各大廠商在高端市場上推出怎樣的頂級産品,市場上最主流的消費人群仍然是中低端用戶群體,能在中低價位市場上始終有穩定的表現,這幾乎成了品牌們在中國市場的生存之道。當然,隨著技術的不斷發展普及,即便是低...查看完整版>>諾基亞新機僅售1380元 近期超值入門手機薦
 
3.5吋屏800MHz芯安卓機 入門級LG E510評測
3.5吋屏800MHz芯安卓機 入門級LG E510評測
LG E510上市參考價:待定(2000元左右) 點擊查看詳細參數 項目得分項目得分 外觀基礎功能 做工(5)4通訊(5)5 機身尺寸(4)5短信(5)5 操控感(6)4拍照(5)3 手機硬件高級功能 屏幕(5)2UI界面(5)4...查看完整版>>3.5吋屏800MHz芯安卓機 入門級LG E510評測
 
入門級Android智能雲手機 基伍A70評測
入門級Android智能雲手機 基伍A70評測
前言:2010年,在如Gartner、IDC這樣國際知名市場調研機構關于全球手機市場的報告中,一個名爲“G"Five”的品牌以黑馬的姿態跻身前十。這家名不見經傳的公司,也因此首次出現在公衆視野中。 基伍A70手機事實上,G"Fi...查看完整版>>入門級Android智能雲手機 基伍A70評測
 
入門不低端 華爲U8520安卓手機詳細評測
入門不低端 華爲U8520安卓手機詳細評測
華爲作爲國內最大通訊設備生産商之一,自然在手機這一領域也不會落後于其他國産廠商。而旗下發布的更得到用戶的青睐。今天小編爲大家帶來的是華爲雙模手機U8520的詳細評測。 華爲 U8520圖片評測論壇報價先評後測 1、...查看完整版>>入門不低端 華爲U8520安卓手機詳細評測
 
 
回到王朝網路移動版首頁