django получить токен csrf - PullRequest
0 голосов
/ 06 мая 2019

В моем веб-приложении мне нужно получить токен csrf для отправки некоторых данных через xmlhttprequest, но я получаю сообщение об ошибке на сервере как « django \ middleware \ clickjacking.py», строка 26, в process_response, если ответ.get ('X-Frame-Options') не является None: AttributeError: у объекта 'str' нет атрибута 'get'". Это мой код

// views.py

from django.shortcuts import render
from django.shortcuts import render_to_response
from django.template.context_processors import csrf

def interfacePage(request):
    return render(request, "interfacePage.html", {})

def interfacePageSubmit(request):
    if request.method == 'POST':
        datarecvd = request.POST['data']
        return render(request, "interfacePageSubmit.html", {})
    else:
        print("in def interfacePageSubmit")
        csrf1 = str(csrf(request)['csrf_token'])
        return csrf1

// interfacePage.html

function sumbit() {

        var xhr = new XMLHttpRequest();
        var url = {% url 'interfacePageSubmit' %};


        xhr.open("GET", url, false);
        xhr.withCredentials = false;
        xhr.setRequestHeader("x-csrf-token", "fetch");    
        xhr.setRequestHeader("Accept", "application/json");
        xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        var data = null;
        xhr.send(data);
        console.log(xhr.readyState);
        console.log(xhr.status);

        if (xhr.readyState === 4 && xhr.status === 200) {
            var csrfToken = xhr.getResponseHeader('x-csrf-token');
            url = {% url 'interfacePageSubmit' %};
            xhr.open("POST", url, true);
            xhr.withCredentials = false;
            xhr.setRequestHeader("Accept", "application/json");
            xhr.setRequestHeader("Content-Type", "application/json; charset=utf-8");
            xhr.setRequestHeader('x-csrf-token', csrfToken); 
        }

**/ further code goes here

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

1 Ответ

1 голос
/ 06 мая 2019

Вам необходимо вернуть HttpResponse. Попробуйте что-то вроде этого:

def interfacePageSubmit(request):
    # . . . 
    csrf1 = str(csrf(request)['csrf_token'])
    json_data = json.dumps(csrf1)
    return HttpResponse(json_data, content_type='json')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...