#python #graphql #tornado #graphene-python
#python #graphql #tornado #graphene-python
Вопрос:
Я пытаюсь интегрировать GraphQL в свой веб-сервис, который был написан на tornado (python). Используя загрузчики данных, я могу ускорить свой запрос и избежать отправки нескольких запросов в мою базу данных. Но проблема в том, что я не могу найти никаких примеров или определения, которые равнялись бы переменной «context» на уровне запроса для хранения GraphQLView. Я нашел пример, написанный на sanic, см. Эту ссылку. Есть ли в «tornado» какое-либо определение, равное «context» (get_context) в sanic??? Или какие-либо примеры для разрешения подобных атрибутов:
class Bandwidth(ObjectType):
class Meta:
interfaces = (Service, )
min_inbits_value = Field(Point)
max_inbits_value = Field(Point)
def resolve_min_inbits_value(context, resolve_info, arg1, arg2):
Ответ №1:
Наконец, я могу получить доступ и изменить контекст на уровне запроса, я хочу поделиться тем, как я это делаю. Я могу обернуть свойства контекста в TornadoGraphQLHandler, но мне нужно проанализировать необработанный запрос:
from graphene_tornado import tornado_graphql_handler
from graphql import parse
class TornadoGraphQLHandler(tornado_graphql_handler.TornadoGraphQLHandler):
@property
def context(self):
data = self.parse_body()
query, variables, operation_name, id = self.get_graphql_params(self.request, data)
try:
document = parse(query)
args = dict()
for member in document.definitions[0].selection_set.selections[0].arguments:
args[member.name.value] = member.value.value
return <dataloaders with the arguments in request here>
except:
return self.request
Таким образом, я могу получить доступ к загрузчику данных с помощью «info.context» в графене на следующем уровне.