Python之Web框架介紹

2018-06-08 17:34 更新

所有的語言Web框架本質(zhì)其實(shí)就是起一個(gè)socket服務(wù)端,監(jiān)聽一個(gè)端口,然后運(yùn)行起來

Web框架包含兩部分,一部分是socket,另外一部分是業(yè)務(wù)的邏輯處理,根據(jù)請(qǐng)求的不同做不同的處理

Python的Web框架分成了兩類,

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

  2. 不包含socket(框架本身通過第三方模塊實(shí)現(xiàn)socket)只包含業(yè)務(wù)邏輯處理(django,Flask)

WSGI的全稱是Web Server Gateway Interface,翻譯過來就是Web服務(wù)器網(wǎng)關(guān)接口。具體的來說,WSGI是一個(gè)規(guī)范,定義了Web服務(wù)器如何與Python應(yīng)用程序進(jìn)行交互,使得使用Python寫的Web應(yīng)用程序可以和Web服務(wù)器對(duì)接起來。WSGI一開始是在PEP-0333中定義的,最新版本是在Python的PEP-3333定義的。

下面實(shí)例的代碼中RunServer()函數(shù)就是符合WSGI標(biāo)準(zhǔn)的一個(gè)HTTP處理函數(shù),它接收兩個(gè)參數(shù):

  1. environ:一個(gè)包含所有HTTP請(qǐng)求信息的dict對(duì)象;

  2. start_response:一個(gè)發(fā)送HTTP響應(yīng)的函數(shù);

通過wsgiref模塊實(shí)現(xiàn)一個(gè)自定義的web框架

代碼的大概邏輯就是: 定義了兩個(gè)函數(shù)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):
    # 返回一個(gè)含有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()

通過本機(jī)的curl命令去訪問測試

yangwen@yangwen:~$ curl 127.0.0.1:8000/index
<h1>/index</h1>ansheng@Darker:~$ curl 127.0.0.1:8000/asdasd
404yangwen@yangwen:~$ curl 127.0.0.1:8000/manage
/manage

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

MVC and MTV

MVC模式就是架構(gòu)模式的一種,MVC模式的目的是實(shí)作一種動(dòng)態(tài)的程式設(shè)計(jì),使后續(xù)對(duì)程式的修改和擴(kuò)充功能簡化,并且使程式某一部分的重復(fù)利用成為可能。除此之外,此模式通過對(duì)復(fù)雜度的簡化,使程式結(jié)構(gòu)更加直覺。

軟體系統(tǒng)通過對(duì)自身基本部分分離的同時(shí)也賦予了各個(gè)基本部分應(yīng)有的功能。專業(yè)人員可以通過自身的專長分組:

  1. 控制器Controller - 負(fù)責(zé)轉(zhuǎn)發(fā)請(qǐng)求,對(duì)請(qǐng)求進(jìn)行處理;

  2. 視圖View - 介面設(shè)計(jì)人員進(jìn)行圖形介面設(shè)計(jì);

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

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


本文出自 “一盞燭光” 博客,謝絕轉(zhuǎn)載!

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)