errorpages.py 1.2 KB

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