Csrf не удалось при загрузке файла через swagger

Я пытаюсь загрузить файл изображения, используя swagger it throws

{    "detail": "CSRF Failed: токен CSRF отсутствует или неверен".   }

. Важно отметить, что я использую django-rest-swagger версии 0.3.0 и django версии 1.7.

YAML для загрузки изображения выглядит так:

parameters:
    - name: image
      in: formData
      required: true
      type: file
    - name: caption
      required: true
      type: string

Я не хочу использовать @csrf_exempt. Я попытался передать заголовок, но это не сработало. заголовок был примерно таким:

    - name: X-CSRF-Token
      description: csrftoken to be passed in header
      in: header
      required: true
      type: string

любая помощь будет оценена.

Ответ 1

Во-первых, я не понимаю, что такое чванство.

если вы используете html и jquery в своем интерфейсе, вы можете использовать это, когда публикуете свои данные.

w.getCsrfToken = function () {
    // Extract CSRF token from cookies
    var cookies = document.cookie.split(';'),
        csrf_token = null;
    $.each(cookies, function (index, cookie) {
        var cookieParts = $.trim(cookie).split('=');
        if (cookieParts[0] === 'csrftoken') {
            csrf_token = cookieParts[1];
        }
    });
    return csrf_token;
};

Ответ 2

У меня была такая же проблема, если вы в курсе Django, это просто заголовок без названия.

Используйте "X-CSRFToken" вместо "X-CSRF-токена", который работал у меня.

Ответ 3

Не знаю о чванстве, но при использовании jquery ajax я всегда использую это:

$.ajaxSetup({
    data: {csrfmiddlewaretoken: '{{ csrf_token }}' },
});

Надеюсь, что это поможет

Ответ 4

Выполнить токен CSRF в шаблоне.

{% csrf_token %}

Доступ к этому токену в шаблоне JavaScript.

const token = $("input[name='csrfmiddlewaretoken']").val();

Включите его в заголовки перед вызовом API.

headers:{'X-CSRFToken': token}

Надеюсь, что он устранит ошибку.

Ответ 5

удалить всю проблему csrv редактировать представления

from django.views.decorators.csrf import csrf_protect
from django.template import RequestContext
from django.shortcuts import render_to_response

@csrf_protect
def any_function(request):
    csrfContext = RequestContext(request)
    return render_to_response('htmlpage', csrfContext)