views.py 964 B

1234567891011121314151617181920212223242526272829303132333435363738
  1. import json
  2. from ariadne import (
  3. QueryType,
  4. graphql_sync,
  5. load_schema_from_path,
  6. make_executable_schema,
  7. )
  8. from django.conf import settings
  9. from django.http import HttpResponseBadRequest, JsonResponse
  10. from django.shortcuts import render
  11. from django.views.decorators.csrf import csrf_exempt
  12. from .schema import schema
  13. @csrf_exempt
  14. def graphql_view(request):
  15. if request.method == "GET":
  16. return render(request, "misago/admin/graphql_playground.html")
  17. if request.method != "POST":
  18. return HttpResponseBadRequest()
  19. if request.content_type != "application/json":
  20. return HttpResponseBadRequest()
  21. try:
  22. data = json.loads(request.body)
  23. except ValueError:
  24. return HttpResponseBadRequest()
  25. success, result = graphql_sync(
  26. schema, data, context_value=request, debug=settings.DEBUG
  27. )
  28. status_code = 200 if success else 400
  29. return JsonResponse(result, status=status_code)