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-данные.