diff --git a/graphene_django/views.py b/graphene_django/views.py index 4d2c17b..b696020 100644 --- a/graphene_django/views.py +++ b/graphene_django/views.py @@ -188,7 +188,7 @@ class GraphQLView(View): or 200 ) else: - result, status_code = self.get_response(request, data) + result, status_code = self.get_response(request, data, show_graphiql) return HttpResponse( status=status_code, content=result, content_type="application/json" @@ -202,11 +202,11 @@ class GraphQLView(View): ) return response - def get_response(self, request, data): + def get_response(self, request, data, show_graphiql=False): query, variables, operation_name, id = self.get_graphql_params(request, data) execution_result = self.execute_graphql_request( - request, data, query, variables, operation_name + request, data, query, variables, operation_name, show_graphiql ) if getattr(request, MUTATION_ERRORS_FLAG, False) is True: @@ -233,7 +233,7 @@ class GraphQLView(View): response["id"] = id response["status"] = status_code - result = self.json_encode(request, response) + result = self.json_encode(request, response, pretty=show_graphiql) else: result = None @@ -288,8 +288,12 @@ class GraphQLView(View): return {} - def execute_graphql_request(self, request, data, query, variables, operation_name): + def execute_graphql_request( + self, request, data, query, variables, operation_name, show_graphiql=False + ): if not query: + if show_graphiql: + return None raise HttpError(HttpResponseBadRequest("Must provide query string.")) try: @@ -322,12 +326,14 @@ class GraphQLView(View): request.method.lower() == "get" and operation_ast.operation != OperationType.QUERY ): + if show_graphiql: + return None + raise HttpError( HttpResponseNotAllowed( ["POST"], - ( - f"Can only perform a {operation_ast.operation.value} operation " - "from a POST request." + "Can only perform a {} operation from a POST request.".format( + operation_ast.operation.value ), ) )