python before_request详解
before_request 顾名思义,就是在request请求之前做的事情。
它会在每一个请求来的时候,都会先去请求before_request注册的函数。
before_request需要注册一个函数,可以不需要参数。
这个示例是在每个请求之前,做一个分类,不同环境来源的请求需要做
不同的事情。
演示代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | from flask import Flask,request app = Flask(__name__) @app .route( "/test1" , methods = [ 'POST' ]) def t1(): data = request.get_json(force = True ) env = data.get( 'env' ) print (env) return env @app .route( "/test2" ) def t2(): env = request.args.get( 'env' ) print (env) return env @app .before_request def before(): res_method = request.method env = '' if res_method = = 'GET' : env = request.args.get( 'env' ) if res_method = = 'POST' : data = request.get_json(force = True ) env = data.get( 'env' ) if env = = 't1' : print ( 'before t1, I need change nginx' ) elif env = = 't2' : print ( 'before t2,I need to update mysql' ) else : print ( 'new env: %s, I need check it' % env) return None if __name__ = = "__main__" : app.run() |
结果演示
C:\Users\jh>curl -H "Content-type: application/json" -d "{\"env\":\"t1\"}" http://127.0.0.1:5000/test1
t1
C:\Users\jh>curl http://127.0.0.1:5000/test2?env=t2
t2
C:\Users\jh>curl http://127.0.0.1:5000/test2?env=t7
t7
后台日志输出
127.0.0.1 - - [26/Aug/2022 19:41:28] "POST /test1 HTTP/1.1" 200 -
before t1, I need change nginx
t1
127.0.0.1 - - [26/Aug/2022 19:41:36] "GET /test2?env=t2 HTTP/1.1" 200 -
before t2,I need to update mysql
t2
127.0.0.1 - - [26/Aug/2022 19:41:40] "GET /test2?env=t7 HTTP/1.1" 200 -
new env: t7, I need check it
t7
before_request通常使用在验证登录,过滤请求攻击等方面
详细文档
https://dormousehole.readthedocs.io/en/latest/api.html#flask.Flask.before_request
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)