1. 程式人生 > >Python之Web框架介紹

Python之Web框架介紹

楊文 python gateway 應用程序 服務器 第三方

所有的語言Web框架本質其實就是起一個socket服務端,監聽一個端口,然後運行起來

Web框架包含兩部分,一部分是socket,另外一部分是業務的邏輯處理,根據請求的不同做不同的處理

Python的Web框架分成了兩類,

  1. 即包含socket也包含業務邏輯處理的(tornado)

  2. 不包含socket(框架本身通過第三方模塊實現socket)只包含業務邏輯處理(django,Flask)

WSGI的全稱是Web Server Gateway Interface,翻譯過來就是Web服務器網關接口。具體的來說,WSGI是一個規範,定義了Web服務器如何與Python應用程序進行交互,使得使用Python寫的Web應用程序可以和Web服務器對接起來。WSGI一開始是在PEP-0333中定義的,最新版本是在Python的PEP-3333定義的。

技術分享

下面實例的代碼中RunServer()函數就是符合WSGI標準的一個HTTP處理函數,它接收兩個參數:

  1. environ:一個包含所有HTTP請求信息的dict對象;

  2. start_response:一個發送HTTP響應的函數;

通過wsgiref模塊實現一個自定義的web框架

代碼的大概邏輯就是: 定義了兩個函數index()manage(),如果用戶訪問的URL是127.0.0.1:8000/index

就返回<h1>/index</h1>,如果用戶訪問的是127.0.0.1:8000/manage就返回/manage,如果訪問其他頁面就返回404

#!/usr/bin/python2
# _*_coding:utf-8 _*_
from wsgiref.simple_server import make_server

def index(arg):
    # 返回一個含有html代碼的字符串
    return "<h1>%s</h1>" %(arg)

def manage(arg):
    return arg

URLS = {
    "/index": index,
    "/manage": manage,
}

def RunServer(environ, start_response):
    start_response(‘200 OK‘, [(‘Content-Type‘, ‘text/html‘)])
    url = environ[‘PATH_INFO‘]
    if url in URLS.keys():
        func_name = URLS[url]
        ret = func_name(url)
    else:
        ret = "404"
    return ret

if __name__ == ‘__main__‘:
    httpd = make_server(‘‘, 8000, RunServer)
    httpd.serve_forever()

通過本機的curl命令去訪問測試

[email protected]:~$ curl 127.0.0.1:8000/index
<h1>/index</h1>[email protected]:~$ curl 127.0.0.1:8000/asdasd
[email protected]:~$ curl 127.0.0.1:8000/manage
/manage

無論多麽復雜的Web應用程序,入口都是一個WSGI處理函數。HTTP請求的所有輸入信息都可以通過environ獲得,HTTP響應的輸出都可以通過start_response()加上函數返回值作為Body,復雜的Web應用程序,光靠一個WSGI函數來處理還是太底層了,我們需要在WSGI之上再抽象出Web框架,進一步簡化Web開發。

MVC and MTV

MVC模式就是架構模式的一種,MVC模式的目的是實作一種動態的程式設計,使後續對程式的修改和擴充功能簡化,並且使程式某一部分的重復利用成為可能。除此之外,此模式通過對復雜度的簡化,使程式結構更加直覺。

技術分享

軟體系統通過對自身基本部分分離的同時也賦予了各個基本部分應有的功能。專業人員可以通過自身的專長分組:

  1. 控制器Controller - 負責轉發請求,對請求進行處理;

  2. 視圖View - 介面設計人員進行圖形介面設計;

  3. 模型Model - 程式設計師編寫程式應有的功能(實作演算法等等)、資料庫專家進行資料管理和資料庫設計(可以實作具體的功能);

MVC中的M是代表MODLE層,V代表VIEW層,C代表Contrl層. MTV中的M是代表MODLE層,T代表Template(模板層),V代表VIEW層.


本文出自 “一盞燭光” 博客,謝絕轉載!

Python之Web框架介紹