Flask學習

Web框架

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

Flask框架

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

Flask的‘微’體如今它只提供Web服務的基本功能,其餘的功能是由Flask的擴展實現,用戶能夠根據需求應用核心擴展。它的基本功能依賴於符合 WSGI 規範(Web Server Gateway Interface)的 Werkzeug 庫和模板系統 Jinja2
當咱們經過URL訪問網站時,是向Web服務器發送了請求。服務器會根據URL將請求交給相應的Web程序處理。因此服務器與Web應用程序的交互須要必定的規則。而Python專用的規範是WSGI [PEP-3333定義],文章 WSGI簡介 給出了簡單說明。flask

Flask核心功能

Flask涉及到兩個重要的類——Flask和Blueprint[藍本] 類。
flask的應用程序須要Flask類實例化才能運行,網站的基本配置信息也包含在此類中。
實例化以下:segmentfault

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

配置以下:api

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

Blueprint類與Flask相似,它可以更好的組織Web應用程序,並能延遲Flask類實例的建立。服務器

1. 路由和請求處理

路由的存在是爲了將Web服務的請求轉交給Flask程序實例的函數處理,簡單的說處理URL和函數之間的關係稱爲路由。函數稱爲視圖函數
Flask類包含了route裝飾器,經過初始化Flask類註冊視圖函數。cookie

無參數

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

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

帶參數

在不少時候用戶不一樣,使用的URL不一樣,帶參數的路由可以很好的處理URL中變化的部分。如在網頁中顯示我的名字app

@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(路徑標識)框架

處理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)

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

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文檔

相關文章
相關標籤/搜索