Flask中的中间件
before_request和after_request from flask import Flask app = Flask(__name__) # 请求中间件 @app.before_r

Flask中的中间件

发布时间:2024-03-19 (2024-03-19)

before_request和after_request

from flask import Flask

app = Flask(__name__)


# 请求中间件
@app.before_request
def xxxx():
    print('执行之前')


# 响应中间件
@app.after_request
def xxxxx(response):
    print('执行之后')
    return response


@app.route('/x1')
def x1():
    print('x1')
    return 'x1'


@app.route('/x2')
def x2():
    return 'x2'


if __name__ == '__main__':
    app.run(debug=True, port=80)

多个请求中间件,按照先后顺序执行

多个请求中间件,执行顺序与请求中间件相反

常见装饰器

# 只执行一次的请求中间件
@app.before_first_request 
def before_f():
    print('来了')


# 自定义404页面
@app.errorhandler(404)
def not_found(error):
    return "This page does not exist"
# 全局传值
def fun():
    return dict(xxx='123')

app.context_processor(fun)

闪现

from flask import Flask, flash, get_flashed_messages

app = Flask(__name__)
app.secret_key = 'xxx-xxx-xxx-xxx'
app.config.from_object('flask_study.settings.DevelopmentConfig')  # 导入类或者路径


@app.route('/x1')
def x1():
    flash('你好')  # 设置消息
    return '设置消息'


@app.route('/x2')
def x2():
    print(get_flashed_messages())  # 接收消息,接收了之后,后面就没有了
    return '接收消息'


if __name__ == '__main__':
    app.run()

也可以给消息设定一个分类

from flask import Flask, flash, get_flashed_messages

app = Flask(__name__)
app.secret_key = 'xxx-xxx-xxx-xxx'
app.config.from_object('flask_study.settings.DevelopmentConfig')  # 导入类或者路径


@app.route('/x1')
def x1():
    flash('你好', category='x1')
    flash('你好1', category='x2')
    return '设置消息'


@app.route('/x2')
def x2():
    print(get_flashed_messages())
    print(get_flashed_messages(category_filter='x1'))  # 接收特定消息
    return '接收消息'


if __name__ == '__main__':
    app.run()

flask中间件

from flask import Flask

app = Flask(__name__)
app.secret_key = 'xxx-xxx-xxx-xxx'
app.config.from_object('flask_study.settings.DevelopmentConfig')  # 导入类或者路径


@app.route('/x1')
def x1():
    print('视图函数')
    return '设置消息'


class MiddleWare:
    def __init__(self, old_wsgi_app):
        self.old_wsgi_app = old_wsgi_app

    def __call__(self, *args, **kwargs):
        # 在这里用不了request,session
        # 所以中间件应用不多
        print('请求之前')
        obj = self.old_wsgi_app(*args, **kwargs)
        print('请求之后')
        return obj


if __name__ == '__main__':
    # 请求到了之前,会执行 app的__call__方法
    app.wsgi_app = MiddleWare(app.wsgi_app)
    app.run()