2016-08-18 2 views

Antwort

15

Zum Beispiel, wenn Sie authentication_classes = (TokenAuthentication,) in Ihren API-Ansichten verwenden, sollten Sie einen Endpunkt zu einem GraphQLView auf diese Weise geschmückt hinzufügen:

urls.py:

# ... 
from rest_framework.authentication import TokenAuthentication 
from rest_framework.permissions import IsAuthenticated 
from rest_framework.decorators import authentication_classes, permission_classes, api_view 

def graphql_token_view(): 
    view = GraphQLView.as_view(schema=schema) 
    view = permission_classes((IsAuthenticated,))(view) 
    view = authentication_classes((TokenAuthentication,))(view) 
    view = api_view(['POST'])(view) 
    return view 

urlpatterns = [ 
# ... 
    url(r'^graphql_token', graphql_token_view()), 
    url(r'^graphql', csrf_exempt(GraphQLView.as_view(schema=schema))), 
    url(r'^graphiql', include('django_graphiql.urls')), 
# ... 

beachten Sie, dass wir einen neuen ^graphql_token Endpunkt hinzugefügt und das ursprüngliche ^graphql beibehalten, das vom GraphiQL-Tool verwendet wird.

Dann sollten Sie den Header Authorization in Ihrem GraphQL-Client festlegen und auf den Endpunkt graphql_token zeigen.

+0

Funktioniert das noch für Sie? Ich versuche, das gleiche mit SessionAuthentication zu tun, aber ich bekomme einen Fehler zurück von Graphen-Django, wenn es versucht, den Körper der Anfrage zu lesen? – Joe

+0

Funktioniert immer noch, aber ich habe nicht die aktuellsten Versionen von Paketen. Meine Antwort verwendet: Django == 1.8.3 djangorestframework == 3.2.2 django-graphiql == 0.4.4 Graphen == 0.10.2 graphql-Kern == 0.5.3 graphql-django-view = = 1.3 graphql-relay == 0.4.4 –

3

Hinzufügen einige zusätzliche Schritte, die ich nehmen musste, wenn im Anschluss an diese Integration:

class RTGraphQLView(GraphQLView): 

def parse_body(self, request): 
    if type(request) is rest_framework.request.Request: 
     return request.data 
    return super().parse_body(request) 

Graphene die .body attr erwartete aber DRF liest es und legt es auf .data vor zu GraphQLView weitergegeben werden.

Verwandte Themen