Evgenii Legotckoi
Sept. 21, 2016, 10:13 a.m.

Django - Tutorial 006. Customizing error pages 403, 404, 500

Many resources are decorated error pages if there is a failure in processing a request from the client.
For a start has been made on the site customization of the most frequently occurring errors and other debugging until you come across, but still ahead.

As announced at the beginning of this article, was to customize the following error:

  1. 403 - Authorization error, access is denied.
  2. 404 - Page Not Found;
  3. 500 - Internal server error;

Customization error 404, 500

To customize the error 404 and 500 need to write a request handlers, and enough to write their ideas in the form of method.

The templates add your customized html file, that is:

  • error404.html
  • error500.html

The module that implements presentation for the site - home . The templates of the same module placed themselves customized templates errors.

Override the default handler in urls.py in the main module of site:

  • handler404
  • handler500

In the code, it looks like this:

from home.views import e_handler404, e_handler500

handler404 = e_handler404
handler500 = e_handler500

We describe the presentation in views.py home module file:

from django.shortcuts import render_to_response
from django.template import RequestContext


def e_handler404(request):
    context = RequestContext(request)
    response = render_to_response('error404.html', context)
    response.status_code = 404
    return response


def e_handler500(request):
    context = RequestContext(request)
    response = render_to_response('error500.html', context)
    response.status_code = 500
    return response

Customization Errors 403

Error 403 occurs when an authorized user is not trying to gain access to that part of the site to which access is restricted to authorized users.

In Django is reached by the test status of the user and adding to the pages of the protective token, CSRF mechanism. This error can occur and if the user is logged in, but performs actions that require CSRF token verification, and the token is lost or is not true. The fact is that for the correctness of the token, you need to add in the template in the form of a special tag:

{% csrf_token %}

It will be entered and the token, but just to add to the template, it is not enough. Before you start rendering the template, you must add a token to the context that will be passed to the template. I.e,

from django.template.context_processors import csrf
from django.shortcuts import render_to_response


def any_request(request):
    context = {}
    context.update(csrf(request))

    ...
    return render_to_response('any_request.html', context=context)

And now about customization. For csrf necessary that settings.py file added csrf module and indicated a view that will be engaged in the processing of this error:

MIDDLEWARE = [
    ...
    'django.middleware.csrf.CsrfViewMiddleware',
    ...
]

CSRF_FAILURE_VIEW = 'home.views.csrf_failure'

The templates add error403.html, and views.py file prescribe processor performance.

def csrf_failure(request, reason=""):
    context = RequestContext(request)
    response = render_to_response('error403.html', context)
    response.status_code = 403
    return response

For Django I recommend VDS-server of Timeweb hoster .

Do you like it? Share on social networks!

Супер, очень полезно!

Comments

Only authorized users can post comments.
Please, Log in or Sign up
  • Last comments
  • ИМ
    Nov. 22, 2024, 9:51 p.m.
    Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
  • Evgenii Legotckoi
    Oct. 31, 2024, 11:37 p.m.
    Добрый день. Да, можно. Либо через такие же плагины, либо с постобработкой через python библиотеку Beautiful Soup
  • A
    Oct. 19, 2024, 5:19 p.m.
    Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
  • ИМ
    Oct. 5, 2024, 4:51 p.m.
    Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
  • d
    July 5, 2024, 8:02 p.m.
    Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…