Python學習——web架構

來源:互聯網
上載者:User

標籤: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架構

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.