Consultas de GraphQL en Django devolviendo Ninguna

Hola chicos,

entonces estoy tratando de usar consultas de graphQL en django. Básicamente tengo dos aplicaciones, mi aplicación ‘api’ que contiene todo lo que necesito para hacer las consultas y otra llamada ‘frontend’ desde la que llamo a la api para usar estas consultas.

Puedo usar la vista GraphQL para escribir consultas en ella y funciona perfectamente, pero siempre que bash realizar la consulta, obtengo esto: “OrderedDict ([(‘users’, None)])”

Resultado de mi consulta en la vista GraphQl

Y para el código:

En ‘api’ mi schema.py :

import graphene import graphql_jwt from graphene import relay, ObjectType, AbstractType, List, String, Field,InputObjectType from graphene_django import DjangoObjectType from graphene_django.filter import DjangoFilterConnectionField from datetime import date, datetime from django.contrib.auth.models import User from django.contrib.auth import get_user_model .... class Query(graphene.ObjectType): me = graphene.Field(UserType) users = graphene.List(UserType) profile = relay.Node.Field(ProfileNode) all_profiles = DjangoFilterConnectionField(ProfileNode) def resolve_users(self, info): ### Returns all users ### user = info.context.user if user.is_anonymous: raise Exception('Not logged!') if not user.is_superuser: raise Exception('premission denied') return User.objects.all() def resolve_me(self, info): ### Returns logged user ### user = info.context.user if user.is_anonymous: raise Exception('Not logged!') return user def resolve_all_profiles(self, info, **kwargs): ### Returns all profiles ### return Profile.objects.all() ..... def execute(my_query): schema = graphene.Schema(query=Query) return schema.execute(my_query) 

Y el views.py que llama a la aplicación ‘api’ en mi interfaz de aplicaciones:

 from django.shortcuts import render import graphene from api import schema from django.contrib.auth import authenticate def accueil(request): if request.user.is_authenticated: check = "I am logged" else: check = "I am not logged" result = schema.execute("""query { users { id username } }""") return render(request, 'frontend/accueil.html', {'result' : result.data, 'check' : check}) 

La plantilla :

 

OTC

the users are : {{result}}


{{check}}

login logout

y finalmente :

El resultado de la página web.

y el error en la consola:

 An error occurred while resolving field Query.users Traceback (most recent call last): File "/home/victor/myenv/lib/python3.5/site-packages/graphql/execution/executor.py", line 311, in resolve_or_error return executor.execute(resolve_fn, source, info, **args) File "/home/victor/myenv/lib/python3.5/site-packages/graphql/execution/executors/sync.py", line 7, in execute return fn(*args, **kwargs) File "/home/victor/poc2/poc2/api/schema.py", line 67, in resolve_users user = info.context.user AttributeError: 'NoneType' object has no attribute 'user' Traceback (most recent call last): File "/home/victor/myenv/lib/python3.5/site-packages/graphql/execution/executor.py", line 330, in complete_value_catching_error exe_context, return_type, field_asts, info, result) File "/home/victor/myenv/lib/python3.5/site-packages/graphql/execution/executor.py", line 383, in complete_value raise GraphQLLocatedError(field_asts, original_error=result) graphql.error.located_error.GraphQLLocatedError: 'NoneType' object has no attribute 'user' 

Cualquier ayuda es bienvenida, muchachos, simplemente no entiendo por qué no funciona ya que estoy conectado y todo funciona perfectamente en la vista de graphql.

PD: perdón si cometí algún error, el inglés no es mi lengua materna

A menos que esté escribiendo un cliente de prueba, probablemente no debería llamar a schema.execute desde una vista de Django. Pero asumiendo que tiene sus razones para hacer esto, su problema específico es que no está pasando al usuario cuando invoca schema.execute en una vista de schema.execute .

Eche un vistazo a la documentación de ejecución y verá que deberá proporcionar un argumento opcional para el contexto. Su código no proporciona un contexto, por lo tanto, info.context es None , según su excepción. Desafortunadamente, el ejemplo

 result = schema.execute('{ name }', context_value={'name': 'Syrus'}) 

no es específico de Django Pero creo que lo que funciona en una vista funcional de Django es:

 result = schema.execute(query, context_value=request)