Flask小知識集合

全局變量g的使用

flask在上下文中提供了四種變量,分別是:

變量名 上下文 說明
current_app 應用上下文 當前激活程序的程序實例
g 應用上下文 處理請求時用作臨時存儲的對象。每次請求都會重設這個變量
request 請求上下文 請求對象,封裝了客戶端發出的HTTP請求中的內容
session 請求上下文 用戶會話,用於存儲請求之間需要“記住”的字典

其中g就是在一次請求中當做全局變量來使用的。g:global,給g賦值,就可以在當前這次請求中全局使用。

傳參

import time
from flask import Flask 

# 實例化一個Flask類,app代表着flask程序。
app = Flask(__name__)

# 向flask實例添加一個路由
@app.route('/')
def hello_world():
    print(double(10))
    return 'Hello World!'


def double(x):
    return 2 * x

全局變量

import time
from flask import Flask,g 

# 實例化一個Flask類,app代表着flask程序。
app = Flask(__name__)

# 向flask實例添加一個路由
@app.route('/')
def hello_world():
    g.x = 20
    print(double())
    return 'Hello World!'


def double():
    return 2 * g.x

g對象在整個request請求處理期間生效,這表明,g對象是與request是一一對應的。一次request請求,就有一個g對象,在這次請求之前,之後,以及同時間的請求裏,他們互不干擾。

異常捕獲

flask提供了一個專門用來處理應用錯誤的裝飾器errorhandler, 利用這個裝飾器,你可以非常輕鬆的實現對系統錯誤異常的捕捉和處理。

errorhandler可以傳入http code,例如404,500。這是比較常見的請求錯誤,如果能夠爲這種錯誤提供專門的頁面,無疑會提高用戶的體驗。除了http code, 還可以傳入異常類,捕捉特定的異常。

import time
from flask import Flask,g 

app = Flask(__name__)

@app.errorhandler(404)
def error(e):
    print('捕捉到404,找不到路由')
    return '捕捉到404,找不到路由', 404

@app.errorhandler(ZeroDivisionError)
def catch_except(e):
    return '捕捉到異常 '+ str(e), 500

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

正常請求,除0報錯

請求不存在路由

計算測試覆蓋率

coverage.py是一個使用python編寫的檢查代碼覆蓋率的工具,我們可以使用它來檢查測試覆蓋率。
安裝

pip install coverage

簡單使用

def add(x, y):
    return x + y

def subtract(x, y):
    return x - y

def multiply(x, y):
    return x * y


add(2,3)

使用如下命令獲取測試結果

coverage run cover_test.py
coverage report 
(work) ➜  Desktop coverage report           
Name            Stmts   Miss  Cover
-----------------------------------
cover_test.py       7      2    71%
-----------------------------------
TOTAL               7      2    71%

在flask中,可以運行測試命令同時開啓覆蓋率檢查。

coverage run --source=sayhello  -m unittest discover

--source:指定要檢查的包或模塊爲sayhello
-m 指定自動測試的命令。如果使用pytest則爲 -m pytest 使用unittest則爲 -m unittest

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章