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

posted @ 2022-03-02 22:05  金色旭光  阅读(134)  评论(0编辑  收藏  举报