我使用Django设置了Graphene服务器。当我通过GraphiQL(Web客户端)运行查询时,一切正常。但是,当我从其他任何地方运行时,我收到错误:“必须提供查询字符串。”
我做了一些故障排除。 GraphiQL使用String id = "0000000101%";
query.setParameter("id", id);
将POST数据发送到GraphQL服务器。以下是我从GraphiQL的Chrome网络标签中复制的请求正文:
Content-Type: application/json
当我使用{"query":"query PartnersQuery {\n partners{\n name\n url\n logo\n }\n}","variables":"null","operationName":"PartnersQuery"}
将其复制到邮递员时,我收到以下回复:
Content-Type: application/json
这个问题的原因是什么?我没有对架构做过任何疯狂的事情。刚刚接受了石墨烯文档的教程。还有什么可能导致这样的问题?
答案 0 :(得分:3)
parse_body
无法解析传入数据时会引发此错误。我将通过查看传入此方法的数据并确保其格式正确来启动。
例如,multipart/form-data
部分天真地返回request.POST
,这可能需要被覆盖以处理,例如,apollo-upload-client
发送的文件上传处理请求。
在我们的例子中,我们创建了一个视图,既要求登录又支持apollo-upload-client
用例,并且工作正常。
答案 1 :(得分:2)
在这里,我是如何使用带有简单变异的石墨烯Django后端从Postman获得成功的回应:
{"query":"{myModels {id}}","variables":"null","operationName":null}
这听起来很像你所做的,所以你一定要亲近。
答案 2 :(得分:1)
结帐示例应用并了解他们的工作方式,
e.g。 https://github.com/mjtamlyn/graphene-tutorial 他们做了以下事情:
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())),
答案 3 :(得分:1)
当我尝试使用graphQl
使用POSTMAN
查询时,我遇到了同样的问题,
在POSTMAN中,使用row
类型在json
中发送数据。
你必须像这样制作json数据grapQl查询和突变数据
查询命令:
{"query":"{user(id:902){id,username,DOB}}"}
突变命令:
{ "query": "mutation {createMutations(reviewer:36, comments:\"hello\",loan: 1659, approved: true ){id}}" }
#commnent: String Type
#data_id:Int Type
#approved:Boolean Type
答案 4 :(得分:0)
我遇到了与原版海报Gasim完全相同的问题。在' graphiql.html'中研究代码我看到他们正在将查询字符串(进入正文)转换为URL中的查询参数。因此,您最终会通过Postman发送此URL:
对于我来说,在URL中的查询字符串中精确复制 body 中的内容似乎是荒谬的,但这似乎是让Graphene服务器返回的唯一方法有效的回应。
当然这是一个将被修复的错误/缺点?
罗伯特
答案 5 :(得分:0)
在Django上启用石墨烯
url(r'^graphql', csrf_exempt(GraphQLView.as_view(graphiql=settings.DEBUG))),
执行一些查询,看看它是否有效
在Chrome浏览器上,转到 graphiQL 端点: http://localhost:8000/graphql?打开“ 开发人员工具” ”,然后转到“ 网络”标签。
再次执行查询。现在,它出现在请求列表中。现在,在其上右键单击,并将其复制为“ 复制为CURL ”。现在,您可以进行海峡复制并将其粘贴到安装了curl的linux终端上。或者像您的情况一样,您可以尝试扣除其中的内容,然后尝试在IDE中重用它,例如像Insomnia或Postman这样的客户端。例如,您可能会发现与 graphiQL 上的会话一起使用的授权最终并不是您想要的...
curl 'http://localhost:8000/graphql?' -H 'Origin: http://localhost:8000' -H 'Accept-Encoding: gzip, deflate, br' -H 'Accept-Language: en-US,en;q=0.9,pl;q=0.8,de;q=0.7' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' -H 'Content-Type: application/json' -H 'Accept: application/json' -H 'Cookie: _ga=GA1.1.1578283610.1528109563; _gid=GA1.1.920024733.1541592686; csrftoken=EGBeegFoyMVl8j1fQbuEBG587nOFP2INwv7Q0Ee6HeHHmsLOPUwRonzun9Y6pOjV; sessionid=4u9vngcnmjh927a9avpssvc4oq9qyqoe' -H 'Connection: keep-alive' -H 'X-CSRFToken: EGBeegFoyMVl8j1fQbuEBG587nOFP2INwv7Q0Ee6HeHHmsLOPUwRonzun9Y6pOjV' --data-binary '{"query":"{\n allStatistics(projectId: 413581, first:25) {\n pageInfo {\n startCursor\n endCursor\n hasPreviousPage\n hasNextPage\n }\n edges {\n cursor\n node {\n id\n clickouts\n commissionCanc\n commissionConf\n commissionLeads\n commissionOpen\n eventDate\n extractTstamp\n hash\n leads\n pageviews\n projectId\n transactionsCanc\n transactionsConf\n transactionsOpen\n }\n }\n }\n}\n","variables":null,"operationName":null}' --compressed
答案 6 :(得分:-1)
我的代码中的问题是我为graphQL设置了不正确的URL。我有以下内容:
sendMessage
正斜杠是一个巨大的差异。删除它修复了问题。正确的方法是:
url(r'^graphql/', GraphQLView.as_view())