2017-05-25 30 views
2

我已经使用Django设置了Graphene服务器。当我通过GraphiQL(网络客户端)运行我的查询时,一切正常。但是,当我从其他地方运行时,出现错误:“必须提供查询字符串”。Graphene Django“必须提供查询字符串”

我做了一些故障排除。 GraphiQL将POST数据发送到Content-Type: application/json的GraphQL服务器。下面是我在Chrome网络选项卡复制的GraphiQL请求的身体:

{"query":"query PartnersQuery {\n partners{\n name\n url\n logo\n }\n}","variables":"null","operationName":"PartnersQuery"} 

当我把它复制到邮差与Content-Type: application/json,我得到如下回应:

{ 
    "errors": [ 
    { 
     "message": "Must provide query string." 
    } 
    ] 
} 

有什么可以的这个问题的原因?我没有对模式做任何疯狂的事情。只需遵循石墨烯文档中的教程。还有什么会导致这样的问题?

回答

1

结帐示例应用程序,看看他们是如何做到的事情,

例如 https://github.com/mjtamlyn/graphene-tutorial 他们做到以下几点:当parse_body无法分析传入的数据

from django.views.decorators.csrf import csrf_exempt 
from graphene_django.views import GraphQLView 

url(r'^explore', GraphQLView.as_view(graphiql=True)), 
url(r'^graphql', csrf_exempt(GraphQLView.as_view())), 
2

引发此错误。我会通过查看传入此方法的数据并确保它是正确的类型来开始。

例如,multipart/form-data部天真地返回request.POST,其可能需要被覆盖来处理,例如,apollo-upload-client发送对文件上传处理请求。 在我们的案例中,我们创建了一个既要求登录又要支持apollo-upload-client用例的视图,它工作正常。

1

这里是我是如何能够利用石墨烯Django的后端用一个简单的基因突变,以获得从邮差成功响应:

  1. 设置方法为POST
  2. 的网址添加到您的graphQL端点,例如http://localhost:8000/api/
  3. 添加一个头 - 关键:“内容类型”值:“应用/ JSON”
  4. 将身体“原始”
  5. 粘贴在查询到身体的窗口,例如{"query":"{myModels {id}}","variables":"null","operationName":null}

这听起来很像你做的事情,所以你必须关闭。

0

我遇到了与原始海报Gasim完全相同的问题。研究'graphiql.html'中的代码我发现他们正在将查询字符串(正文)转换为URL中的查询参数。因此,你结束了这个网址被通过邮差派:

http://127.0.0.1:8000/graphql?query=%7B%0A%20%20allCategories%20%7B%0A%20%20%20%20edges%20%7B%0A%20%20%20%20%20%20node%20%7B%0A%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20ingredients%20%7B%0A%20%20%20%20%20%20%20%20%20%20edges%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20node%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20name%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%7D%0A%7D%0A

看来荒谬到我重复恰恰是公司在在URL过的查询字符串,但它似乎是唯一的让石墨烯服务器返回有效响应的方式。

肯定这是一个错误/缺点,将被修复?

Robert

0

在我的代码中的问题是,我有不正确地设置graphQL的URL。我有以下几点:

url(r'^graphql/', GraphQLView.as_view()) 

正斜杠是一个巨大的差异。删除它解决了问题。正确的做法是:

url(r'^graphql', GraphQLView.as_view()) 
相关问题