Flask依賴的核心模塊werkzeug

Flask的web框架實現

Flask是python Web框架,自然要遵 WSGI 規範,需要同時實現服務端程序+應用程序,並且要豐富完善請求和響應的處理。
Flask自身並沒有實現WSGI,而是依賴werkzeug來實現WSGI程序。在開發時,我們使用flask run命令啓動Flask,其中服務端程序就是由Werkzeug提供的,應用程序就是Flask中程序實例app
flask demo

import time
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

在生產環境中,通常需要一個更強健,性能更高的WSGI服務器。這些 WSGI 服務器也被稱爲 WSGI 容器(Standalone WSGI Container),因爲它們可以高效的處理HTTP請求,調用我們編寫的應用程序。這通常有很多選擇,比如

不論是內置的用於開發時使用的服務器Werkzeug,還是gunicornuWSGIGeventWaitres等 實現了規範的WSGI服務器,都可以用運行我們的Flask。

werkzeug

由於Flask是依賴werkzeug來實現的服務端程序,下面來認識同樣由Falsk團隊開發的werkzeug模塊。
Werkzeug是一個德語名字,譯爲“工具”的意思,在python中是一個專門用來處理HTTP和WSGI的工具庫,可以方便的在python程序中處理HTTP協議相關內容。需要注意的是werkzeug不是一個web服務器,也不是一個web框架,而是一個工具包。官方的介紹說是一個WSGI工具包,它可以作爲一個Web框架的服務端庫, 因爲它封裝好了很多Web框架的東西,例如 Request,Response等等。安裝flask時會依賴的安裝好werkzeug。

簡單demo
werkzeug_demo.py

from werkzeug.serving import run_simple

def application(environ, start_response):
    start_response('200 ok', [('Content-Type', 'text/html')])
    return [b'<h1>hello world!</h1>']

if __name__ == "__main__":
    run_simple('localhost', 5000, application)


flask使用werkzeug

flask中如何使用werkzeug作爲服務端程序呢?
在啓動flask時使用的flask run命令,本質上就是通過werkzeug來啓動一個服務端程序。

def run(self, host='localhost', port=5000, **options):
    from werkzeug import run_simple
    if 'debug' in options:
        self.debug = options.pop('debug')
    options.setdefault('use_reloader', self.debug)
    options.setdefault('use_debugger', self.debug)
    return run_simple(host, port, self, **options)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章