一、请求扩展
# 1 before_request 类比django中间件中的process_request,在请求收到之前绑定一个函数做一些事情 # 2 after_request 类比django中间件中的process_response,每一个请求之后绑定一个函数,如果请求没有异常 #总结 重点掌握before_request和after_request, 注意有多个的情况,执行顺序 before_request请求拦截后(也就是有return值),response所有都执行
from flask import Flask,request app=Flask(__name__) @app.before_request def process(): request.name='pdun' print('请求来的时候') @app.route('/') def index(): print('index----',request.name) #放的数据,可以取出来 print('执行程序') return 'index' @app.after_request def text(response): #需要带参数 print('text----', request.name) print('请求走的时候') return response #需要返回出去 if __name__ == '__main__': app.run()
#执行顺序和django中间件相似,来的时候从上往下,走的时候从下往上 from flask import Flask,request app=Flask(__name__) @app.before_request def process(): request.name='pdun' print('请求来的时候111') @app.before_request def process(): request.name='pdun' print('请求来的时候222') @app.route('/') def index(): print('执行程序') return 'index' @app.after_request def text(response): print('请求走的时候111') return response @app.after_request def text(response): print('请求走的时候222') return response if __name__ == '__main__': app.run() 请求来的时候111 请求来的时候222 执行程序 请求走的时候222 请求走的时候111 -------------------------------------------------------------- 如果请求来的时候返回了,请求的执行顺序,与django不同 from flask import Flask,request app=Flask(__name__) @app.before_request def process(): print('请求来的时候111') return 'xxxxxxxxxxx' #来的时候就返回了,直接走请求走的代码 @app.before_request def process(): print('请求来的时候222') @app.route('/') def index(): print('执行程序') return 'index' @app.after_request def text(response): print('请求走的时候111') return response @app.after_request def text(response): print('请求走的时候222') return response if __name__ == '__main__': app.run() 请求来的时候111 请求走的时候222 请求走的时候111
#3 before_first_request 服务一启动,第一次请求会走,以后再也不走了 #4 teardown_request 无论是否出现异常,都会执行 #5 errorhandler @app.errorhandler(404) #可以写状态吗 def error_404(arg): return "404错误了" #6 template_global 标签 @app.template_global() def add(a1, a2): return a1 + a2 #{{add(1,2)}} #视图函数(执行程序)不需要传return add,模板层直接可以用 #7 template_filter 过滤器 @app.template_filter() def db(a1, a2, a3): return a1 + a2 + a3 #{{ 1|db(2,3)}} #与django不同,可以传多个参数 (django只支持传两个)