Flask提供了两种上下文环境,一个是应用上下文(Application Context),另一个是请求上下文(Request Context)。从名字上就可以知道一个是应用级别的,另一个是单个请求级别的。
上下文装饰器@app.before_request、@app.teardown_request、@app.after_request
看代码:
#!/usr/bin/env python3
# encoding:utf-8
'''
@author: lierl
@file: use_flask_1.py
@time: 2018/3/29 14:29
'''
__author__ = 'lierl'
from flask import Flask, g, request
app = Flask(__name__)
@app.before_request#在请求收到之前绑定一个函数做一些事情。
def before_request():
print('before request started')
@app.after_request#每一个请求之后绑定一个函数,如果请求没有异常。
def after_request(response):
print('after request finished')
return response
@app.teardown_request#每一个请求之后绑定一个函数,即使遇到了异常。
def teardown_request(exception):
print('teardown request')
@app.route('/')
def index():
print("route")
return 'Hello, world'
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8081)
运行结果:
127.0.0.1 - - [29/Mar/2018 14:51:53] "GET / HTTP/1.1" 200 -
before request started
route
after request finished
teardown request
另:如果有多个@app.before_request和@app.after_request会怎样呢?
最终结果会按照代码@app.before_request和@app.after_request的上下关系来运行,谁在上面会先运行谁