2017-05-25 67 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()) 
相關問題