1. 程式人生 > >簡單而直接的Python web 框架:web.py

簡單而直接的Python web 框架:web.py

web.py 是一個Python 的web 框架,它簡單而且功能強大。web.py 是公開的,無論用於什麼用途都是沒有限制的。而且相當的小巧,應當歸屬於輕量級的web 框架。但這並不影響web.py 的強大,而且使用起來很簡單、很直接。在實際應用上,web.py 更多的是學術上的價值,因為你可以看到更多web 應用的底層,這在當今“抽象得很好”的web 框架上是學不到的 :) 如果想了解更多web.py,可以訪問web.py 的官方文件。

先感受一下web.py 的簡單而強大:

  1. import web  
  2. urls = (  
  3.     '/(.*)''hello'
  4. )  
  5. app = web.application(urls, globals())  
  6. class hello:  
  7.     def GET(self, name):  
  8.         i = web.input(times=1)  
  9.         ifnot name:   
  10.             name = 'world'
  11.         for c in xrange(int(i.times)):   
  12.             print'Hello,', name+'!'
  13.         return'Hello, ' + name + '!'
  14. if __name__ == 
    "__main__":  
  15.     app.run()  

上面就是一個基於web.py 的完整的Web 應用。將上面的程式碼儲存為檔案code.py,在命令列下執行python code.py。然後開啟你的瀏覽器,開啟地址:http://localhost:8080 或者 http://localhost:8080/test 沒有意外的話(當然要先安裝web.py,下面會有介紹),瀏覽器會顯示“Hello, world”或者 Hello, test



Linux 下執行


這是一個最簡單的Hello world Web 應用。是不是很簡單?!下面將較為詳細地介紹下web.py 。

1. 安裝

下載 web.py 的安裝檔案,將下載得到的檔案 web.py 解壓,進入解壓後的資料夾,在命令列下執行:python setup.py install,在Linux 等系統下,需要root 的許可權,可以執行:sudo python setup.py install。

2. URL 處理

對於一個站點來說,URL 的組織是最重要的一個部分,因為這是使用者看得到的部分,而且直接影響到站點是如何工作的,例如:www.baidu.com ,其URLs 甚至是網頁介面的一部分。而web.py 以簡單的方式就能夠構造出一個強大的URLs。

在每個web.py 應用,必須先import web 模組:

  1. import web  

現在,我們須要告訴web.py URL 如何組織,讓我們以一個簡單例子開始:

  1. urls = (  
  2.   '/''index'    )  

在上面的例子中,第一部分是匹配URL的正則表示式,像//help/faq/item/(\d+)等(\d+將匹配數字)。圓括號表示捕捉對應的資料以便後面使用。第二部分是接受請求的類名稱,像indexviewwelcomes.hello(welcomes模組的hello類),或者get_\1\1 會被正則表示式捕捉到的內容替換,剩下來捕捉的的內容將被傳遞到你的函式中去。(‘index’)是一個類名,匹配的請求將會被髮送過去。這行表示我們要URL/(首頁)被一個叫index的類處理。

現在我們需要建立一個列舉這些 url 的 application。

  1. app = web.application(urls, globals())  

GET 和 POST : 區別

現在,我們需要編寫index 類。當大部人瀏覽網頁的時候,他們都沒有注意到,瀏覽器是通過HTTP 跟World Wide Web 通訊的。通訊的細節不太重要,但要明白一點,使用者是通過URLs(例如 / 或者 /foo?f=1)來請求web 伺服器完成一定請求的(例如 GET 或者POST)。

GET 是最普遍的方法,用來請求一個頁面。當我們在瀏覽器裡輸入“harvard.edu” 的時候,實際上它是向Web 伺服器請求GET ”/“。另一個常見的方法是POST,常用於提交特定型別的表單,比如請求買什麼東西。每當提交一個去做什麼事情(像使用信用卡處理一筆交易)的請求時,你可以使用POST。這是關鍵,因為GET的URL可以明文傳輸提交的引數。如果提交的是一些重要的敏感資訊,例如使用者名稱,密碼,則可能被別人抓包獲取到。而 POST 則不會在 URL 上傳輸 提交的資訊,POST 是通過表單提交資訊。

在我們的web.py 程式碼中。我們清晰區分這兩種方法:

  1. class index:  
  2.     def GET(self):  
  3.         print"Hello, world!"

當接收到一個GET 請求時,上面的GET 方法將會被web.py 呼叫。好的。現在,我們只需新增最後一行程式碼,讓web.py 啟動網頁應用:

  1. if __name__ == "__main__":  
  2.     app.run()  

上面告訴web.py 如何配置URLs,以及找尋的類在檔案中的全域性名稱空間。然後為我們啟動上面的應用。

整個 code.py 檔案的內容如下:

  1. import web  
  2. urls = (  
  3.     '/(.*)''hello'
  4. )  
  5. app = web.application(urls, globals())  
  6. class hello:  
  7.     def GET(self, name):  
  8.         i = web.input(times=1)  
  9.         ifnot name:   
  10.             name = 'world'
  11.         for c in xrange(int(i.times)):   
  12.             print'Hello,', name+'!'
  13.         return'Hello, ' + name + '!'
  14. if __name__ == "__main__":  
  15.     app.run()  

實際上web 應用的程式碼就只得上面的幾行,而且這是一個完整的web.py 應用。

3.啟動服務

在你的命令列下輸入:

  1. $ python code.py                               # 使用預設埠 8080
  2. 或者  
  3. $ python code.py 10000# 改變埠為 10000

你的web.py 應用已經啟動了伺服器。通過瀏覽器訪問:http://localhost:8080/ ,會見到”Hello, world!“。


修改預設埠

在啟動伺服器的時候,如果你不想使用預設埠,你可以使用這樣的命令來指定埠號: python code.py 8888。

4. 除錯

直接新增一行 web.internalerror = web.debugerror 即可。如下

  1. if __name__=="__main__":  
  2.     web.internalerror = web.debugerror  
  3.     app.run()  

5. 模板

在Python 裡面編寫HTML 程式碼是相當累贅的,而在HTML 裡嵌入Python 程式碼則有趣得多。幸運地,web.py 使這過程變得相當容易。

注意:舊版本的web.py 是用Cheetah templates 模板的,你可以繼續使用,但官方已不再提供支援。

新建一個 code.py 的 python檔案。內容如下:

  1. import web  
  2. urls = (  
  3.     # '/(.*)', 'hello',
  4.     '/hello_1[/]?.*''hello_1',  
  5.     '/hello_2/(.*)''hello_2',  
  6. )  
  7. app = web.application(urls, globals())  
  8. render=web.template.render('templates')  
  9. class hello_1:  
  10.     def GET(self):          
  11.         return render.index_1()   
  12. class hello_2:  
  13.     def GET(self, name):          
  14.         return render.index_2("Lisa")   
  15. if __name__ == "__main__":  
  16.     app.run()  

建立模板

這裡,我們先在專案 code.py 同一級目錄中新建一個目錄(例如 templates )集中存放並用來組織模板檔案,便於管理。然後在templates下新建HTML 檔案(例如:”index.html“)。這裡新建 兩個 HTML 檔案。 index_1.html 和 index_2.html

淺談Python Web 框架Django, Twisted, Tornado, Flask, Cyclone 和 Pyramid

地方 def jinja follow 技術選擇 trac oschina pyramid dash Django Django 是一個高級的 Python Web 框架,支持快速開發,簡潔、實用的設計。如果你正在建一個和電子商務網站相似的應用,那你應

使用Python-Flask框架開發Web網站系列課程(四)構建前端

前言 使用IDE:PyCharm 作業系統:Mac Python的版本:3.6 我的郵箱:[email protected] 交流群:372430835 說明: 本次課程的GitHub程式碼在最下面。 本次課程基於上個課程的程式碼,如果沒看過的請先傳

3 web框架 3 web框架

3 web框架   web框架 Web框架(Web framework)是一種開發框架,用來支援動態網站、網路應用和網路服務的開發。這大多數的web框架提供了一套開發和部署網站的方式,也為web行為提供了

Python爬蟲框架Scrapy 爬取伯樂線上實戰

專案介紹 使用Scrapy框架進行爬取伯樂線上的所有技術文章 所用知識點 Scrapy專案的建立 Scrapy框架Shell命令的使用 Scrapy自帶的圖片下載管道 Scrapy自定義圖片下載管道(繼承自帶的管道) Scrapy框架ItemLoader

Python黑科技FuckIt.py

說起 Python 強大的地方,你可能想到是它的優雅、簡潔、開發速度快,社群活躍度高。但真正使得這門語言經久不衰的一個重要原因是它的無所不能,因為社群有各種各樣的第三庫,使得我們用Python實現一個東西實在是太簡單了,你經常會看到幾行程式碼實現爬蟲,10行程式碼實現人臉識別

Python開發【第十四篇】Web框架本質

中一 用戶 contain get pattern app sta doc connect Web框架本質 眾所周知,對於所有的Web應用,本質上其實就是一個socket服務端,用戶的瀏覽器其實就是一個socket客戶端。 1 2 3 4 5 6 7 8 9

Python簡單Web框架web.py實例hello world

brush main 安裝 self name globals bject pytho log 1、安裝web.py模塊easy_install web.py 2、實現代碼 import web urls = (‘/hello‘, ‘hello‘, )

編寫python web框架(一)簡介

== web 方法 nvi ever pytho 必須 ext sim 編寫一個最簡單的應用: def app(environ, start_response): start_response(‘200 OK‘, [(‘Content-Type‘, ‘tex

Python Web框架Django Form組件

multipart ima class mage 決定 red ttr 提示 echo Form簡介 在HTTP中,表單(form標簽),是用來提交數據的,其action屬性說明了其傳輸數據的方法:如何傳、如何接收。 訪問網站時,表單可以實現客戶端與服務器之間的通信。例如查

python web框架views視圖函數

則表達式 定義 string 給定 語言 lan 模板引擎 rem nag Django請求的生命周期是怎樣的? 簡單地說,通過URL對應關系匹配 ->找到對應的函數(或者類)->返回字符串(或者讀取Html之後返回渲染的字符串) 解剖起來如下: 1. 當用戶在

寫一個Python通過select實現的最簡單web框架

127.0.0.1 log put lec func select odi block pos 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 import socket 5 import selec

python web框架之Tornado的簡單使用

繼承 學習 簡單使用 star 接下來 django 就是 HR dem python web框架有很多,比如常用的有django,flask等。今天主要介紹Tornado ,Tornado是一個用Python寫的相對簡單的、不設障礙的Web服務器架構,用以處理

Python開發【第二十一篇】Web框架之Django【基礎】

name line 控制 creat js等 nec serve pan xiaohua 一、 Django簡介 1.web框架簡介 具體介紹Django之前,必須先介紹WEB框架等概念。 web框架: 別人已經設定好的一個web網站模板,你學習它的規則,然後“填空”或“修

Python三大web框架簡單介紹

Django 是重量級框架:它封裝的的功能常豐富非常多所以它是重量級,Django的文件最完善、市場佔有率最高、招聘職位最多。Django提供全套的解決方案(full-stack framework + batteries included),基本要什麼有什麼(比如:cache、session、feed、or

Python web入門Django學習與實踐二(簡單頁面實現和建立一個模板)

一、第一個頁面實現(“hello world”) 實現步驟:         1.在views.py檔案中建立一個處理函式(引數名可以隨意,但是最好使用request,看起來清楚明瞭)                 def   index(request):