Так же, как и автор вопроса, столкнулся с данной проблемой, при реализации веб-хуков для чат-ботов.
Перенаправление на другое приложение django у меня работало изначально.
Но, при написании универсального приложения, это не выход.
Изучил исходники django. Судя по всему, каким то образом CsrfViewMiddleware не видит у коллбека (view) поля csrf_exempt, которое и добавляется одноименным декоратором.
../django/middleware/csrf.py:212 (django 2.2)
Соответственно выходом будет добавить данное поле самостоятельно в результирующую view-функцию:
# Class based view
@method_decorator(csrf_exempt, name='dispatch')
class MyViewClass(View):
@classmethod
def as_view(cls, **initkwargs):
view = super().as_view(**initkwargs)
view.csrf_exempt = True
return view
# view function
@csrf_exempt
def my_view(request, **kwargs):
return HttpResponse()
my_view.csrf_exempt = True