標籤:read doctype world environ 服務 相關 運行 index comm
對於所有的Web應用,本質上其實就是一個socket服務端,使用者的瀏覽器其實就是一個socket用戶端。
WSGI(Web Server Gateway Interface)是一種規範,它定義了使用python編寫的web app與web server之間介面格式,實現web app與web server間的解耦。
一、python標準庫提供的獨立WSGI伺服器稱為wsgiref
1 from wsgiref.simple_server import make_server 2 3 def RunServer(environ, start_response): 4 start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)]) 5 return [bytes(‘<h1>Hello, web!</h1>‘, encoding=‘utf-8‘), ] 6 7 if __name__ == ‘__main__‘: 8 httpd = make_server(‘10.88.5.131‘, 8000, RunServer) 9 print("Serving HTTP on port 8000...")10 httpd.serve_forever()
運行後結果為:
二、自訂web架構
通過python標準庫提供的wsgiref模組開發一個自己的Web架構
1 #!/usr/bin/env python 2 #-*- coding:utf-8 -*- 3 4 from wsgiref.simple_server import make_server 5 6 def f1(): 7 f = open("index.html") 8 data = f.read() 9 f.close()10 #讓返回的資訊跟資料庫的資訊替換(動態 )11 import time12 db_str = str(time.time())13 data = data.replace("((x))",db_str)14 #jinja2模板給你提供更複雜的替換15 return data16 17 def f2():18 f = open("login.html")19 data = f.read()20 f.close()21 from jinja2 import Template22 template = Template(data)23 #接受值,進行特殊的替換24 ret = template.render(name="koka",user_list=["asd","qwe"])25 return ret.encode("utf-8")26 27 #1 定義一個字典,上面定義函數28 routers = {29 ‘/index/‘:f1,30 ‘/login/‘:f2,31 }32 33 def RunServer(environ, start_response):34 #environ封裝使用者相關的所有資訊35 #environ["PATH_INFO"] 讀取使用者請求的url36 start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)])37 #根據url的不同,執行不同的函數,返回不同的字串38 request_url = environ[‘PATH_INFO‘]39 #print environ #這裡可以通過斷點來查看它都封裝了什麼資料40 41 #如果使用者請求的url和咱們定義的url匹配42 if request_url in routers.keys():43 func_name = routers[request_url]()44 ret = func_name()45 return ret46 else:47 return ‘404‘48 49 if __name__ == ‘__main__‘:50 httpd = make_server(‘‘, 8000, RunServer)51 print "Serving HTTP on port 8000..."52 httpd.serve_forever()
模板引擎:
1 <!DOCTYPE html> 2 <html> 3 <head lang="en"> 4 <meta charset="UTF-8"> 5 <title></title> 6 </head> 7 <body> 8 <h1>Hello</h1> 9 <div style="style="color:red;font-size:50px;">10 World --- ((x))11 </div>12 </body>13 </html>
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Title</title> 6 <link rel="stylesheet" href="/static/css/commons.css"> 7 </head> 8 <body> 9 <h1>Home</h1>10 <h2>{{ name }}</h2>11 <h2>{{ age }}</h2>12 <ul>13 {% for item in user_list %}14 <li>{{ item }}</li>15 {% endfor %}16 </ul>17 </body>18 </html>
Python學習——web架構