由于Sanic是异步框架,所以没办像flask一样提供一个全局的Request对象,但是Sanic提供了一个自定义上下文的功能,只需要指定ctx即可

Sanic十四:Sanic上下文ctx_自定义

 

一、Sanic自带的上下文管理器

由源码看,当没有指定ctx时,Sanic会默认使用 SimpleNamespace() 进行实例化

Sanic十四:Sanic上下文ctx_flask_02

Sanic十四:Sanic上下文ctx_数据_03

 

使用示例,在中间件中使用ctx记录一些数据,这样,此中间件之后的所有流程,都能使用此数据

Sanic十四:Sanic上下文ctx_flask_04

Sanic十四:Sanic上下文ctx_中间件_05

 

二、自定义上下文

先定义一个数据结构,并在实例化Sanic的时候,指定ctx为此实例对象,然后在接口之中使用,这个时候,各接口中的ctx是同一个对象

Sanic十四:Sanic上下文ctx_flask_06

先带着json数据请求第一个接口,第一个接口会把数据存到自定义的上下文中

Sanic十四:Sanic上下文ctx_自定义_07

再请求第二个接口,就可以把存着的数据拿出来使用

Sanic十四:Sanic上下文ctx_flask_08

 

这样就可以将从数据库获取的用户对象存储在 ctx 中。之后的其他中间件以及请求期间的处理程序都可以对此进行访问。

 

讨论群:249728408