Решение проблемы «Ошибка 403» в Pingdjack
Во время работы с библиотекой pingdjack от Ивана Сагалаева, обнаружилась досадная особенность, не отраженная в документации, но доставившая мне немало хлопот.
Ввиду того, что в последних версиях django по умолчанию включена защита от CSRF, система со включенным CSRFMiddleware выдает ошибку 403. Решить это можно двумя путями:
- отключением django.middleware.csrf.CsrfViewMiddleware в settings.py
- изменением кода pingdjack
Во втором варианте в файл server.py требуется добавить следующее:
# в начале файла
from django.views.decorators.csrf import csrf_exempt
# Добавить @csrf_exempt между @require_POST и def server_view
@require_POST
@csrf_exempt
def server_view(request, root='/'):
Второй метод выглядит предпочтительнее, т.к. маловероятно, что пингующий сайт вдруг, внезапно, возьмет откуда-то требуемый CSRF-токен, а следовательно CSRF защита для данного участка кода бессмысленна.