我使用graphene-django制作了一个简单的graphql服务器,并且在http://127.0.0.1:8000/graphql的桌面浏览器中成功测试了查询和变异。也为了在移动应用程序中进行测试,我制作了一个使用graphql_flutter包的简单颤动的移动应用程序。我的flutter应用程序已成功通过hasura-heroka graphql端点进行了测试,但是我的flutter应用程序无法连接到我的graphene-django graphql端点。当我尝试运行我的移动应用程序时,它给出了一个错误信息:
ClientExceptation:无法连接到http://127.0.0.1:8000/graphql。
另一方面,为了解决此问题,我在Django项目的settings.py中设置了ALLOWED_HOSTS = ['我的Ipv4地址'],并使用此新主机运行graphene-django服务器,并且尝试使用以下方式运行Flutter移动应用程序:新的Endpoin:http://my_IPv4_address:8000/graphql,但仍无法正常工作,并给出相同的错误。
请帮助我
我解决了上述问题。我将GraphQLView与csrf_exempt装饰器包装在django项目的urls.py文件中,从而免除了GraphqlView的CSRF保护(与此相同(请参见source ):
from django.conf.urls import url, include
from django.contrib import admin
from django.views.decorators.csrf import csrf_exempt
from graphene_django.views import GraphQLView
from cookbook.schema import schema
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^graphql$', csrf_exempt(GraphQLView.as_view(graphiql=True,schema=schema))),
]
应该提到的是,在CSRF保护设置中进行了上述修改之后,我在flutter应用程序中使用了http://my-IPv4-address:8000/graphql来成功连接。要获得IPv4地址,请遵循此guide。之后,我将我的IPv4地址添加到settings.py文件中的ALLOWED_HOSTS中,如下所示:
ALLOWED_HOSTS = ['192.168.x.xxx', 'localhost', '127.0.0.1']
最后是运行graphene-django服务器,我在cmd控制台中使用此命令:
(env) python ./manage.py runserver 0.0.0.0:8000