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