1. import asyncio
    
  2. from http import HTTPStatus
    
  3. 
    
  4. from django.core.exceptions import BadRequest, SuspiciousOperation
    
  5. from django.db import connection, transaction
    
  6. from django.http import HttpResponse, StreamingHttpResponse
    
  7. from django.views.decorators.csrf import csrf_exempt
    
  8. 
    
  9. 
    
  10. def regular(request):
    
  11.     return HttpResponse(b"regular content")
    
  12. 
    
  13. 
    
  14. def no_response(request):
    
  15.     pass
    
  16. 
    
  17. 
    
  18. class NoResponse:
    
  19.     def __call__(self, request):
    
  20.         pass
    
  21. 
    
  22. 
    
  23. def streaming(request):
    
  24.     return StreamingHttpResponse([b"streaming", b" ", b"content"])
    
  25. 
    
  26. 
    
  27. def in_transaction(request):
    
  28.     return HttpResponse(str(connection.in_atomic_block))
    
  29. 
    
  30. 
    
  31. @transaction.non_atomic_requests
    
  32. def not_in_transaction(request):
    
  33.     return HttpResponse(str(connection.in_atomic_block))
    
  34. 
    
  35. 
    
  36. def bad_request(request):
    
  37.     raise BadRequest()
    
  38. 
    
  39. 
    
  40. def suspicious(request):
    
  41.     raise SuspiciousOperation("dubious")
    
  42. 
    
  43. 
    
  44. @csrf_exempt
    
  45. def malformed_post(request):
    
  46.     request.POST
    
  47.     return HttpResponse()
    
  48. 
    
  49. 
    
  50. def httpstatus_enum(request):
    
  51.     return HttpResponse(status=HTTPStatus.OK)
    
  52. 
    
  53. 
    
  54. async def async_regular(request):
    
  55.     return HttpResponse(b"regular content")
    
  56. 
    
  57. 
    
  58. class CoroutineClearingView:
    
  59.     def __call__(self, request):
    
  60.         """Return an unawaited coroutine (common error for async views)."""
    
  61.         # Store coroutine to suppress 'unawaited' warning message
    
  62.         self._unawaited_coroutine = asyncio.sleep(0)
    
  63.         return self._unawaited_coroutine
    
  64. 
    
  65.     def __del__(self):
    
  66.         try:
    
  67.             self._unawaited_coroutine.close()
    
  68.         except AttributeError:
    
  69.             # View was never called.
    
  70.             pass
    
  71. 
    
  72. 
    
  73. async_unawaited = CoroutineClearingView()