views.py 951 B

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