Django не устанавливает CSRF-токен на AJAX GET от angularJS

Я пишу приложение с AngularJS на внешнем интерфейсе и Django в качестве службы REST на внутреннем сервере. Я пытаюсь отправить некоторые данные JSON, используя запрос POST, но столкнулся с проблемой csrf-токена (токен CSRF отсутствует или неверен). Насколько я знаю, ранее я должен был сделать запрос GET на Django, чтобы получить этот токен. Итак, я написал простой вид:

def get_csrf_token(request):
    return HttpResponse(json.dumps({'success': True}))

Я добавил httpProvider по умолчанию, и при запуске углового приложения сделал GET запрос на просмотр:

angular.module('app')
    .config(function($httpProvider){
        $httpProvider.defaults.xsrfCookieName = 'csrftoken';
        $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
    })
    .run(function($http){
        $http.get("http://127.0.0.1:8888/get_csrf_token/")
    })

но это представление не устанавливает токен CSRF, и я все еще не могу сделать запрос POST.

1 ответ

Решение

Если ваше представление не отображает шаблон, содержащий тег шаблона csrf_token, Django может не установить cookie-токен CSRF. Это часто встречается в тех случаях, когда формы динамически добавляются на страницу. Для решения этой проблемы Django предоставляет декоратор представления, который принудительно устанавливает настройку cookie: sure_csrf_cookie ().

Другие вопросы по тегам