由于Sanic是异步框架,所以没办像flask一样提供一个全局的Request对象,但是Sanic提供了一个自定义上下文的功能,只需要指定ctx即可
一、Sanic自带的上下文管理器
由源码看,当没有指定ctx时,Sanic会默认使用 SimpleNamespace() 进行实例化
使用示例,在中间件中使用ctx记录一些数据,这样,此中间件之后的所有流程,都能使用此数据
二、自定义上下文
先定义一个数据结构,并在实例化Sanic的时候,指定ctx为此实例对象,然后在接口之中使用,这个时候,各接口中的ctx是同一个对象
先带着json数据请求第一个接口,第一个接口会把数据存到自定义的上下文中
再请求第二个接口,就可以把存着的数据拿出来使用
这样就可以将从数据库获取的用户对象存储在 ctx 中。之后的其他中间件以及请求期间的处理程序都可以对此进行访问。