views.py 1.1 KB

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