Невозможно отправить данные поста javascript в представление django

У меня есть функция в javascript, в которой я пытаюсь получить очень простую пару ключ-значение данных через пост-запрос в то же представление, в котором отображается веб-страница. У меня есть форма в том же шаблоне/вебстранице HTML, которая может отправлять данные post в представление просто отлично, однако javascript не может этого сделать, и я остаюсь с нулевыми данными в представлении.

Javascript: `

 postAccount();
    async function postAccount() {
        accountPromise = getAccount().then(accounts => {
            return accounts[0];
        }) //This function call to retrieve the account will be put here until I can figure out a way to
        //pull the address with the user pressing login ONLY IF the the user has already connected theyre metamask.
        account = await accountPromise;
        var data = new FormData();
        data.append("address", account.toString());
        console.log("address=" + account.toString());
        let post = new XMLHttpRequest();
        post.open("POST", "{% url 'index' %}", true);
        post.setRequestHeader('Content-Type', 'application/json');
        post.send(data);
    }

Django view:

@csrf_exempt
def index(request):
    context = {}
    usernameInput = None;
    address = None;
    if (request.method == 'POST'):
        usernameInput = request.POST.get("username_input")
        address = request.POST.get("address")
        print(usernameInput, address)
    if (usernameInput != None and address != None):
        user = generalUser(address = str(address), username = usernameInput, lastLogin = timezone.now())
        user.save()
    # else: raise Exception("username or address is null!")
    return render(request, "chatswap/index.html", context)

`

Я пытался изменить способ отправки данных в post.send() практически всеми возможными способами от JSON.stringify("address": account) до просто "address=" + account.toString(), но ничего не изменилось. Имя пользователя, полученное из формы запроса post, работает нормально, но адрес всегда null.

Поскольку вы используете 'application/json' в качестве content-type, django не разбирает данные в request.POST. Попробуйте распечатать request.body, чтобы увидеть данные.

Итак, я разобрался с этим, спасибо за помощь! Для тех, кто столкнется с этим, я использовал fetch API для отправки POST запроса в представление.

Затем я последовал инструкции Mas Zero (принятый ответ) и использовал request.body для доступа к данным, а не request.POST.get().

После этого я разобрал данные JSON в словарь python с помощью json.loads(request.body).

Вернуться на верх