甚麼是flask呢?維基百科這樣解釋:
Flask是一個使用Python編寫的輕量級Web應用框架。基於Werkzeug WSGI工具箱和Jinja2模板引擎。
這部分先跳過Jinja2模板引擎的說明,因為本篇主要內容放在restful的部分,待之後筆者有機會在跟大家專門說明flask時在介紹。接下來先說明Werkzeug跟WSGI是甚麼。
本文章同步放置於此
WSGI
是Web Server Gateway Interface的縮寫,是為Python語言定義的Web伺服器和Web應用程式或框架之間的一種簡單而通用的埠,而Werkzeug是實現WSGI規範的一個函式庫,再來flask是基於Werkzeug下開發的一個framework,而WSGI的內容又說了些甚麼呢,細節部分需要請讀者參考WSGI的維基百科,不過這部分筆者要先說明根據維基百科的說明WSGI相關內容如下:
WSGI區分為兩個部份:一為「伺服器」或「閘道」,另一為「應用程式」或「應用框架」。在處理一個WSGI請求時,伺服器會為應用程式提供環境資訊及一個回呼函式(Callback Function)。當應用程式完成處理請求後,透過前述的回呼函式,將結果回傳給伺服器。
正因為flask符合這協定,所以我們可以定義middelware
在不改變flask內容的狀況下來完成某些功能。
介紹完甚麼是flask後相信大家經過第一天的文章就知道要如何使用,flask的使用方式如下列式子所列:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "Hello World!"
if __name__ == "__main__":
app.run()
會使用flask後這裡在更進一步要介紹flask內有甚麼功能。
這部分介紹flask的config要如何設定,基本上有幾種方法,較常用的分成以下幾種設定方式:
首先像操作字典dict
一樣的設定方式如下:
app.config['TESTING'] = True
再來設定物件屬性的方式來設定
app.testing = True
最後是透過字典dict
的update
方法一次設定資料的內容。
app.config.update(
TESTING=True,
SECRET_KEY=b'_5#y2L"F4Q8z\n\xec]/'
)
在說明完設定的方式後再來如果有需要知道flask有哪些資料可以設定,以及設定後有甚麼公用請看flask官網的設定章節
相信大家在在產品上線後都會需要log來追蹤是否有bug,或者是否有出乎意料的狀況,此時相信透過print是沒辦法解決的,所以這裡介紹flask內建的log功能logger,而使用方式如下:
app.logger.debug('A value for debugging')
app.logger.warning('A warning occurred (%d apples)', 42)
app.logger.error('An error occurred')
其中app
就是flask實體,而logger
有甚麼更進一步的用法呢,請各位讀者參考flask官方網站的logger篇
在客製化middleware之前先教大家如何使用middleware,使用的方法如下:
app.wsgi_app = printMiddleware(app.wsgi_app)
其中app即是flask的實體,而將wsgi_app包裝起來就可以在呼叫flask前後先透過middleware處理。
在知道如何使用middleware之後要進一步告訴大家如何自定義一個middleware,請各位讀者看一下下面例子:
class printMiddleware(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
print('— — — — — — — — — —')
print('Function called')
print('— — — — — — — — — —')
return self.app(environ, start_response)
相信各位還記得前面說到WSGI的規範,environ
包含了客户端請求的信息以及其他信息start_response
就是要響應返還的接口,透過以上範例可以在每次request時在server的console印出下列內容了。
— — — — — — — — — —
Function called
— — — — — — — — — —
今天終於開始進入flask的內容了,雖然說了很多觀念的東西,但是還是希望讀者們今天能有所收穫,接下來的日子開始要介紹restful以及flask-restful,敬請期待。