1. 程式人生 > >python web 框架的基本邏輯練習題

python web 框架的基本邏輯練習題

odin def python body func art 函數名 eve bre

 1 # -*- coding:utf-8 -*-
 2 
 3 # date : 2017/12/22
 4 from wsgiref.simple_server import make_server
 5 # 首先是導入wsgi服務器裏的make_server模塊
 6 def routers():
 7     urlpatterns = (
 8         ("/book",func1),
 9         ("/web",func2),
10         ("/main",func3),
11     )
12     return urlpatterns
13 # 用函數來封裝一個元祖(用字典也行),裏面寫的是一組組匹配的path 和 執行函數 也就是要返回給html的內容
14 def func1(environ): 15 return [b"<h1>hello,book</h1>"] 16 def func2(environ): 17 return [b"<h1>hello,web</h1>"] 18 def func3(environ): 19 return [b"<h1>hello,main</h1>"] 20 # 3個返回函數裏對應return的內容 21 22 def application(environ,start_response): 23 # application這裏是固定參數傳遞environ,start_response,雖然是形參,但是必須要這麽寫,這個application方法自己調用是沒有任何效果的
24 # environ是監聽啟動後傳給服務端的請求包,有請求頭和請求體等數據以字符串的形式發來,由服務端模塊解析成一個個鍵值對 25 print(environ["PATH_INFO"]) 26 # ["PATH_INFO"]是environ 請求數據裏的請求地址url後綴,比如淘寶網是www.taobao.com 我們想訪問他頁面裏的聚劃算,點擊後瀏覽器的url會由www.taobao.com變成www,taobao.com/********, 而/*******就是environ["PATH_INFO" 27 path = environ["PATH_INFO
"] 28 #把後綴賦給一個變量path 29 start_response("200 ok",[("Content-Type","text/html")]) 30 #這裏是給返回頭裏加入返回狀態"200 ok"和返回格式[("Content-Type","text/html")],告訴他我們返回的是一個html文檔 31 urlpatterns=routers() 32 # 把存入元祖地址數據的函數實例化 賦給一個變量 33 fun = None 34 #先申明一個變量fun為None 35 for i in urlpatterns: 36 if i[0] == path: 37 fun = i[1] 38 break 39 # 遍歷我們數據裏的後綴i[0]是否有和瀏覽器請求的數據後綴environ["PATH_INFO"]相同的,如果有把i[1]的函數名傳給剛才聲明的fun(也是為了把for循環裏的數據i[1]轉成函數內的全局變量,提高作用域) 40 if fun: 41 return fun(environ) 42 else: 43 return [b"<h1>404!對不起找不到你想要的內容,請輸入正確網址!</h1>"] 44 # 如果有匹配的數據.則返回對應函數fun(),註意我們為什麽必須要傳個參數environ,本例裏也沒有用到這個參數,是因為這是一種規範的格式,environ裏是對面發送請求裏的數據,裏面包含很多有用的信息,可以在fun()裏提取判讀 45 httpd = make_server("127.0.0.1",8088,application) 46 47 #這裏也是一種固定寫法make_server後面傳的3個參數分別是服務端ip地址,服務端口號,application就是整個處理信息接受的方法(請求-返回) 48 print(Serving HTTP on port 8088...) 49 httpd.serve_forever() 50 #開啟監聽服務端 這時候我們用瀏覽器訪問127.0.0.1:8088/book 或者 127.0.0.1:8088/web 就有頁面顯示出來

python web 框架的基本邏輯練習題