flask截获所有请求访问。
即在所有请求进入app.route装饰的函数前先被处理一次。
from flask import Flask, jsonify
app = Flask(__name__)
@app.before_request
def before_request():
ip = request.remote_addr # 客户端IP
url = request.url
print(ip)
print(url)
@app.route('/api/test', methods=['POST'])
def test():
return jsonify({'a': 1, 'b': 2})
if __name__ == "__main__":
app.run(debug=True, host='0.0.0.0', port=6666)
before_request()函数被app.before_request修饰以后,每一次请求到来后,都会先进入函数before_request()中。
如上代码,获取请求的ip以及url,并打印出来,执行完毕后请求才会正常进入到app.route修饰的函数中响应。
如果有多个函数被app.before_request修饰了,那么这些函数会被依次执行。
app.before_request修饰器在开发中用处非常大,比如判断某个ip是否有恶意访问行为,从而进行拦截等操作。
同理,app.after_request修饰器,在用户请求得到函数响应后被执行。
需要注意的是这个执行是在函数返回数据给client之前被调用(做一些其他收尾工作),即请求已经被app.route修饰的函数响应过了,已经形成了response,但还未返回给用户的时调用的。
以上。