views.py 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. import asyncio
  2. from http import HTTPStatus
  3. from django.core.exceptions import BadRequest, SuspiciousOperation
  4. from django.db import connection, transaction
  5. from django.http import HttpResponse, StreamingHttpResponse
  6. from django.views.decorators.csrf import csrf_exempt
  7. def regular(request):
  8. return HttpResponse(b"regular content")
  9. def no_response(request):
  10. pass
  11. class NoResponse:
  12. def __call__(self, request):
  13. pass
  14. def streaming(request):
  15. return StreamingHttpResponse([b"streaming", b" ", b"content"])
  16. def in_transaction(request):
  17. return HttpResponse(str(connection.in_atomic_block))
  18. @transaction.non_atomic_requests
  19. def not_in_transaction(request):
  20. return HttpResponse(str(connection.in_atomic_block))
  21. def bad_request(request):
  22. raise BadRequest()
  23. def suspicious(request):
  24. raise SuspiciousOperation('dubious')
  25. @csrf_exempt
  26. def malformed_post(request):
  27. request.POST
  28. return HttpResponse()
  29. def httpstatus_enum(request):
  30. return HttpResponse(status=HTTPStatus.OK)
  31. async def async_regular(request):
  32. return HttpResponse(b'regular content')
  33. class CoroutineClearingView:
  34. def __call__(self, request):
  35. """Return an unawaited coroutine (common error for async views)."""
  36. # Store coroutine to suppress 'unawaited' warning message
  37. self._unawaited_coroutine = asyncio.sleep(0)
  38. return self._unawaited_coroutine
  39. def __del__(self):
  40. self._unawaited_coroutine.close()
  41. async_unawaited = CoroutineClearingView()