在解析器之前修改 Ariadne 中的上下文

Modify the context in Ariadne before the resolvers

如何在传递给解析器函数之前修改 context 的内容?

查看特殊 Ariadne 类型的文档 ContextValue

GraphQL class 接受关键字参数 context_value。它可以是任何类型,并将被设置为上下文。

如果传递了一个可调用对象,那么它将以 request 作为参数被调用。

所以:

  1. 创建一个函数来构建所需的上下文

    def get_context_value(request):
        return {'request': request, 'test': "TEST"}
    
  2. 在GraphQL初始化时传递函数:

    app = GraphQL(
        schema,
        context_value=get_context_value,
        debug=True,
    )
    

解析器中的上下文值:

{'request': <starlette.requests.Request object at 0x7fc363dbf370>, 'test': 'TEST'}