Sanic十三:Sanic中间件和监听器

一:中间件

中间件是在请求服务器之前或之后执行的功能。它们可以用来在请求到视图函数之前修改请求参数,视图函数响应之后处理响应数据,中间件中只能做数据处理,若中间件修饰的函数中有返回操作,则会直接中断返回给用户
中间件有两种类型:请求和响应。两者都使用 @app.middleware来修饰,参数只支持字符串: 'request' 或 'response'

1、request,request修饰的函数,只需要接收request参数即可,当有多个request中间件时,按 先加载 -> 后加载 顺序执行

当request修饰的函数,有做返回操作时,将不会执行视图函数,直接走响应流程

2、response,response修饰的函数,需同时接收request和response,当有多个response中间件时,按 先加载 -> 先加载 顺序执行

当response修饰的函数,有做返回操作时,将不会继续往下执行,会中断流程,不会返回此步骤设置的返回值返回此步骤return代码之前产生的数据

二、监听器

1、监听器的类型:

服务启动之前:before_server_start
服务启动之后:after_server_start
服务停止之前:before_server_stop
服务停止之后:after_server_stop

2、使用监听器有两种方式

方式一:@app.listener(事件名)修饰对应的处理函数,此时函数需接受两个参数,一个是app,一个是loop

当同一个事件被定义多次时,按加载顺序执行

方式二:Sanic.register_listener(处理函数, 事件名),此时事件函数仍然需接受两个参数,一个是app,一个是loop

同样,当同一个事件被定义多次时,按加载顺序执行

须注意的是,使用start类的监听器执行的任务肯定是下一步依赖于上一步的,比如第一个监听器是链接数据库,第二个监听器是对数据库相关的某些操作,而使用stop类的监听器的时候,就应该先接触与数据库的依赖,再关闭数据库链接

讨论群:249728408
原文地址:https://www.cnblogs.com/zhongyehai/p/15115283.html