Django post request: Forbidden (CSRF-токен отсутствует.): /categories

В моем файле view.py я хочу написать класс на основе View с методами get и post для API. Get уже написан, он работает. Возникла проблема с post:

Код этого класса:

class CategoryListView(View):

    def get(self, request):
        if not check_correct_api_secret(request):
            return HttpResponseForbidden('Unknown API key')

        query_set = Category.objects.all()
        query_params = request.GET
        query_set = paginate(query_params, query_set)
        items_data = serialize_category_list(request, query_set)
        return JsonResponse(items_data, safe=False)

    # Method code is written for example, just to see some kind of reaction to the post request
    def post(self, request):
        query_params = request.POST
        name = query_params.get('name')
        Category.objects.create(name=name)

        return HttpResponse(201)

Я пытаюсь отправить почтовый запрос: /categories?name=Category6 (Например) И получаю ошибку: Forbidden (CSRF token missing.): /categories [21/Jun/2022 16:21:26] "POST /categories?name=Category777 HTTP/1.1" 403 2506

Мой urls.py:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('categories', CategoryListView.as_view()),
]

Попробуйте добавить @csrf_protect в ваш метод сообщения.

@csrf_protect
    def post(self, request):
            query_params = request.POST
            name = query_params.get('name')
            Category.objects.create(name=name)
    
            return HttpResponse(201)

Или просто для проверки добавьте @csrf_exempt

Эта ошибка может возникнуть, если вы не используете CsrfViewMiddleware. В этом случае вы должны использовать csrf_protect на всех представлениях, которые используют тег шаблона csrf_token, а также на тех, которые принимают POST-данные.

Вернуться на верх