errorpages.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from django.shortcuts import render
  2. from misago.core.utils import is_request_to_misago
  3. from misago.admin.views.errorpages import admin_error_page, admin_csrf_failure
  4. @admin_error_page
  5. def _error_page(request, code, message=None):
  6. response = render(request,
  7. 'misago/errorpages/%s.html' % code,
  8. {'message': message})
  9. response.status_code = code
  10. return response
  11. def permission_denied(request, message=None):
  12. return _error_page(request, 403, message)
  13. def page_not_found(request):
  14. return _error_page(request, 404)
  15. @admin_csrf_failure
  16. def csrf_failure(request, reason=""):
  17. response = render(request, 'misago/errorpages/csrf_failure.html')
  18. response.status_code = 403
  19. return response
  20. # Decorators for custom error page handlers
  21. def shared_403_exception_handler(f):
  22. def page_decorator(request, *args, **kwargs):
  23. if is_request_to_misago(request):
  24. return permission_denied(request)
  25. else:
  26. return f(request, *args, **kwargs)
  27. return page_decorator
  28. def shared_404_exception_handler(f):
  29. def page_decorator(request, *args, **kwargs):
  30. if is_request_to_misago(request):
  31. return page_not_found(request)
  32. else:
  33. return f(request, *args, **kwargs)
  34. return page_decorator