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)