Flask學習

TNKNell 8年前發布 | 17K 次閱讀 Flask Web框架

來自: https://segmentfault.com/a/1190000004512699

Web框架

Web框架是構建Web應用的一種方式。盡管現在很多語言如PHP、Java都能開發Web應用,這些語言也都有相應成熟的Web框架,但是請求處理是這些Web框架的核心。 知乎問答-如何學習Web框架 提到Web框架涉及的基本元素,請求處理是學習Web框架的首要問題。

Flask框架

Flask 是一個用于 Python 的微型網絡開發框架。

Flask的‘微’體現在它只提供Web服務的基本功能,其他的功能是由Flask的擴展實現,用戶可以根據需求應用核心擴展。它的基本功能依賴于符合 WSGI 規范(Web Server Gateway Interface)的 Werkzeug 庫和模板系統 Jinja2 。

當我們通過URL訪問網站時,是向Web服務器發送了請求。服務器會根據URL將請求交給相應的Web程序處理。所以服務器與Web應用程序的交互需要一定的規則。而Python專用的規范是WSGI [PEP-3333 定義],文章WSGI簡介 給出了簡單說明。

Flask核心功能

Flask涉及到兩個重要的類——Flask和Blueprint[藍本] 類。

flask的應用程序需要Flask類實例化才能運行,網站的基本配置信息也包含在此類中。

實例化如下:

from flask import Flask
app = Flask(__name__)#__name__程序的文件名,通過此變量定位資源文件位置

配置如下:

app.config['CONFIGURATION'] = "CONFIGURATION"

Blueprint類與Flask類似,它能夠更好的組織Web應用程序,并能延遲Flask類實例的創建。

1. 路由和請求處理

路由 的存在是為了將Web服務的請求轉交給Flask程序實例的函數處理,簡單的說處理URL和函數之間的關系稱為路由。函數稱為 視圖函數 。

Flask類 包含了route裝飾器,通過初始化Flask類注冊視圖函數。

無參數

@app.route('/')
def index():
    return "<h1>Hellow World</h1>"

當訪問網站根域名時,會執行index函數,返回值的結果會在網頁中顯示。。

帶參數

在很多時候用戶不同,使用的URL不同,帶參數的路由能夠很好的處理URL中變化的部分。如在網頁中顯示個人名字

@app.route('/user/<name>')
def user(name):
    return '<h1>Hello, {!r}</h1>'.format(name)

<name> 部分是可變部分,name將作為參數傳遞給視圖函數。此部分可以指定name 的類型,如 @app.route('/user/<int:age>') 可指定參數類型

可指定的類型有int,float,path(路徑標識)

</div>

處理GET, POST請求

@app.route('/', methods=['GET', 'POST'])
def index():
    pass

當網頁需要處理表單等請求時,需要添加methods,使得視圖函數能夠處理http請求。methods中的參數包括了Http協議中定義的5種動作。

響應處理

from flask import make_request
@app.route('/'):
    response = make_request("<h1>Cookie</h1>")
    response.set_cookie('answer','42')
    return response

響應處理中很重要的一部分是處理Http協議的狀態碼。Flask默認狀態碼是200。而返回特殊狀態碼可在返回值中添加,代碼如下:

@app.route('/')
def index():
    return "<h1>Bad Request</h1>", 400 #返回特殊狀態碼

“'?' + 鍵值對“ 形式

? 后的鍵值對由flask提供request對象處理。假設URL為 127.0.0.1:5000?page=1

from flask import request

@app.route('/', methods=['GET']) def index(): page = request.args.get('page', type=int)</pre>

2. 異常處理

在瀏覽網頁時,可能會遇到一些錯誤,flask提供abort函數拋出錯誤,而拋出的異常會直接返回給Web服務器。我們也可以自定義處理這些異常。代碼如下:

from flask import abort
@app.route('/')
def index():
    abort(404) #拋出404異常

@app.errorhandler(404) def page_not_found(error): # 自定義處理異常 return 'This page does not exist', 404</pre>

3. 請求鉤子

請求鉤子 是指在請求之前或之后所做的處理函數

函數名 功能
before_first_request 在處理第一個請求之前執行
before_request 每次請求之前執行
after_request 無異常,每次請求之后執行
teardown_request 即使異常,也在請求之后執行

請求鉤子函數與視圖函數之間通過g變量共享數據。

問題

Q1:如何調試Web應用程序?

Q2:如何評價Web應用程序的性能?

Q3:Web應用程序如何做單元測試?

學習資料

  1. 《Flask Web 開發》SegmentFault系列文章 - 作者只錄入了前七章內容,未涉及實例開發部分

  2. 《Flask Web 開發》中文版 - 建議入手第二版

  3. 《Flask Web 開發》作者Blog - 書中有任何疑問可以在文章中搜索

  4. Flask大型教程項目Blog

  5. Flask API文檔

  6. </ol> </div>

 本文由用戶 TNKNell 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!