当来自 Uvicorn 的 运行 时,Django graphene GraphiQL 页面未加载
Django graphene GraphiQL page not loading when running from Uvicorn
不确定我设置错了什么,但是当 运行 在 uvicorn 中使用 uvicorn mysite.asgi:application
:
时我没有得到 graphiql 界面
[32mINFO[0m: Started server process [[36m14872[0m]
[32mINFO[0m: Waiting for application startup.
[32mINFO[0m: ASGI 'lifespan' protocol appears unsupported.
[32mINFO[0m: Application startup complete.
[32mINFO[0m: Uvicorn running on [1mhttp://127.0.0.1:8000[0m (Press CTRL+C to quit)
[32mINFO[0m: 127.0.0.1:52463 - "GET /graphql/ HTTP/1.1" 200
Not Found: /static/graphene_django/graphiql.js
[33mWARNING[0m: Not Found: /static/graphene_django/graphiql.js
[32mINFO[0m: 127.0.0.1:52463 - "GET /static/graphene_django/graphiql.js HTTP/1.1" 404
Not Found: /static/graphene_django/graphiql.js
[33mWARNING[0m: Not Found: /static/graphene_django/graphiql.js
[32mINFO[0m: 127.0.0.1:52463 - "GET /static/graphene_django/graphiql.js HTTP/1.1" 404
但是当我这样做时它加载正常 python manage.py runserver
这是我安装的:
Python 3.8.2
Django==3.0.5
uvicorn==0.11.3
graphene==2.1.8
graphene-django==2.9.0
graphql-core==2.3.1
在 settings.py 我有:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"),]
# Graphene
GRAPHENE = {
'SCHEMA': 'mysite.schema.schema'
}
Django 本身不在开发服务器之外提供静态文件,您必须自己以某种方式完成。您可以设置像 nginx 这样的反向代理并指示它为您的 staticfiles
目录中的所有静态文件提供服务,或者,仅用于开发 ,您可以指示 django 为它们提供服务,通过添加到您的 urls.py
:
from django.conf import settings
from django.views.static import serve
# Put the line provided below into your `urlpatterns` list.
url(r'^(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT})
确保仅在开发时使用后面的方法,因为它可能会对性能产生严重影响。
对于这两种方法,您还必须使用 python manage.py collectstatic
收集静态文件,因为在开发服务器之外的 django 需要将所有静态文件收集在一个地方,您的 STATIC_ROOT
.
只需在 settings.py 文件中设置 DEBUG = True。
不确定我设置错了什么,但是当 运行 在 uvicorn 中使用 uvicorn mysite.asgi:application
:
[32mINFO[0m: Started server process [[36m14872[0m]
[32mINFO[0m: Waiting for application startup.
[32mINFO[0m: ASGI 'lifespan' protocol appears unsupported.
[32mINFO[0m: Application startup complete.
[32mINFO[0m: Uvicorn running on [1mhttp://127.0.0.1:8000[0m (Press CTRL+C to quit)
[32mINFO[0m: 127.0.0.1:52463 - "GET /graphql/ HTTP/1.1" 200
Not Found: /static/graphene_django/graphiql.js
[33mWARNING[0m: Not Found: /static/graphene_django/graphiql.js
[32mINFO[0m: 127.0.0.1:52463 - "GET /static/graphene_django/graphiql.js HTTP/1.1" 404
Not Found: /static/graphene_django/graphiql.js
[33mWARNING[0m: Not Found: /static/graphene_django/graphiql.js
[32mINFO[0m: 127.0.0.1:52463 - "GET /static/graphene_django/graphiql.js HTTP/1.1" 404
但是当我这样做时它加载正常 python manage.py runserver
这是我安装的:
Python 3.8.2
Django==3.0.5
uvicorn==0.11.3
graphene==2.1.8
graphene-django==2.9.0
graphql-core==2.3.1
在 settings.py 我有:
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"),]
# Graphene
GRAPHENE = {
'SCHEMA': 'mysite.schema.schema'
}
Django 本身不在开发服务器之外提供静态文件,您必须自己以某种方式完成。您可以设置像 nginx 这样的反向代理并指示它为您的 staticfiles
目录中的所有静态文件提供服务,或者,仅用于开发 ,您可以指示 django 为它们提供服务,通过添加到您的 urls.py
:
from django.conf import settings
from django.views.static import serve
# Put the line provided below into your `urlpatterns` list.
url(r'^(?P<path>.*)$', serve, {'document_root': settings.STATIC_ROOT})
确保仅在开发时使用后面的方法,因为它可能会对性能产生严重影响。
对于这两种方法,您还必须使用 python manage.py collectstatic
收集静态文件,因为在开发服务器之外的 django 需要将所有静态文件收集在一个地方,您的 STATIC_ROOT
.
只需在 settings.py 文件中设置 DEBUG = True。