首页 > 编程语言 >python before_request详解

python before_request详解

时间:2022-08-27 23:46:19浏览次数:53  
标签:__ get python request 0.1 env before

before_request 顾名思义,就是在request请求之前做的事情。
它会在每一个请求来的时候,都会先去请求before_request注册的函数。
before_request需要注册一个函数,可以不需要参数。
这个示例是在每个请求之前,做一个分类,不同环境来源的请求需要做
不同的事情。

演示代码

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

标签:__,get,python,request,0.1,env,before
From: https://www.cnblogs.com/mtck/p/16631810.html

相关文章

  • python after_request详解
    after_request是在每一个请求结束之后,再请求的一个钩子函数。它需要有一个参数接收请求的响应。这个示例是使用after_request,对每一个请求后的响应进行分类,从而在请求完成......
  • python文件操作 r w a
    文件操作创建文件"asdf.txt"open()#打开file#文件的位置(路径)mode#操作文件的模式encoding#文件编码方......
  • Python_for_else
    循环“自然”终结(循环条件为假)时else从句会被执行一次,而当循环是由break语句中断时,else子句就不被执行。与for语句相似,while语句中的else子句的语意是一样的∶else块在......
  • python之数据类型转换
    一、隐式类型转换隐式类型转换-自动完成我们对两种不同类型的数据进行运算,较低数据类型(整数)就会转换为较高数据类型(浮点数)以避免数据丢失num_int=123num_flo=1.2......
  • Python-——面向对象
    面向对象编程范式面向对象指的是一种编程范式;编程范式:可以理解为一种编程方式,编程规范,编程模式面向过程面向过程编程:是一种以过程为核心的编程,主要是在解决一个问题......
  • python中encode+decode编码解码
    encode()方法的语法格式:str.encode([encoding="utf-8"][,errors="strict"])decode()方法的语法格式:bytes.decode([encoding="utf-8"][,errors="strict"]) m="以心......
  • C# Webservice 上传文件保存 413 (Request Entity Too Large)
    文件太大,需要调整配置文件在webconfig下插入以下代码:<system.webServer><security><requestFiltering><requestLimitsmaxAllowedContentLength=......
  • python 报错 most likely due to a circular import 解决方法
    原因各个python文件,互相引用,造成的循环引用问题。解决方法:把需要引用的独立成一个文件,让其单向引用使用python写一个稍微大一点的工程时,经常会遇到循环import,即cicular......
  • 小记 【django git python】
    迁移此处生成的迁移文件包含了所有的表结构(已创建和未创建的表)pythonmanage.pymakemigrationsapp_namepythonmanage.pymigrate--fake-initial--fake-initial的......
  • Python中read()、readlines()、readline()
    一、介绍读写文件是最常见的IO操作。Python内置了读写文件的函数,用法和C是兼容的。读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系......