pycharm通過模擬器控制視圖的流程,再結合代碼的嵌入,實現web的連接。
在其最基本的層面上,web應用包含了一組程序(或者函數),當用戶訪問相應的URL時,該程序將被執行。同時,程序的輸出返回給用戶,并呈現在瀏覽器中。
web框架是為了讓開發者更快,更簡潔,無差錯的開發新應用。它通過提供API和開發工具,以減少代碼的編寫量。
開發web應用的兩個經典方法是:
通過編程生成HTML代碼將代碼嵌入HTML頁面中
早期的CGI腳本遵循第一種模型。下列腳本遵循第二種模型,例如PHP[php](代碼用PHP編寫,類似C語言)、ASP(代碼用Visual Basic編寫)以及JSP(代碼用Java編寫)腳本。
這里舉一個PHP程序的例子,執行時,從數據庫中獲得數據,并返回一個顯示選中記錄的HTML頁面。
<html><body><h1>Records</h1><? mysql_connect(localhost,username,password); @mysql_select_db(database) or die( "Unable to select database"); $query="SELECT * FROM contacts"; $result=mysql_query($query); mysql_close(); $i=0; while ($i < mysql_numrows($result)) { $name=mysql_result($result,$i,"name"); $phone=mysql_result($result,$i,"phone"); echo "<b>$name</b><br>Phone:$phone<br /><br /><hr /><br />"; $i++; } ?></body></html>
這種方法的問題在于,程序代碼嵌入到HTML中,但是這個程序在生成額外的HTML的同時,還要生成SQL語句查詢數據庫,應用的不同層次交織在一起,代碼變得難以閱讀和難以維護。對于Ajax應用程序,情況就更糟了,隨著應用頁數(文件)的增加,復雜性也增加。
上述例子的功能,在web2py中可用兩行Python代碼來表達:
def index(): return HTML(BODY(H1('Records'), db().select(db.contacts.ALL)))
在這個簡單的例子中,頁面結構由HTML,BODY和H1對象程序化表示;通過select語句查詢數據庫db;最后,所有結果都被序列化成HTML代碼。注意db不是關鍵字,而是一個用戶定義的變量。為了避免混淆,我們將始終使用db這一術語來指代數據庫連接。
web框架通常分為兩種類型:一種是“膠水”框架,通過組合(粘合)幾個第三方組件來構造。另一種是“全功能棧”框架,通過創建特別設計的緊密整合和協作工作的組件來構造