Django - получение значений из запроса POST, JavaScript выборка API - PullRequest
1 голос
/ 01 мая 2020

Извините, если это вопрос noob, я создаю Django приложение и для этого я пытаюсь получить доступ к данным, полученным из запроса POST, используя JavaScript API выборки, но он отображается пустым Я не понимаю, в чем моя ошибка. Я пытался удалить все ненужные части для отладки, и даже при выполнении только этой части я получаю ту же ошибку.

Код моего views.py

def checkdb(request):
    if request.method == "POST":
        a = request.POST.get('tag', 'default')
        print("printing", a)
        print(request.POST)
    return HttpResponse("Hello")

def check(request):
    return render(request, 'shop/new.html')

Код URLS.py

urlpatterns = [
    path('', views.index, name="shop"),
    path('checkdb/', views.checkdb, name="checkdb"),
    path('check/', views.check, name="check"),
]

Код нового. html, он имеет только тег сценария для получения запроса только для целей тестирования.

<script>

data = JSON.stringify({
    headline: "Testing",
    tag: "Testing",
    background_image: "Testing",
    content: "Testing",
    user: 1
})

let csrftoken = getCookie('csrftoken');
let response = fetch("/shop/checkdb/", {
    method: 'POST',
    body: data,
    headers: { 'Accept': 'application/json, text/plain, */*',
        'Content-Type': 'application/json',
        "X-CSRFToken": csrftoken },
})


function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = cookies[i].trim();
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}

</script>

Когда я go до конечной точки shop / check затем выполняется его скрипт-тег и в консоли не возникает ошибки, но когда я пытаюсь распечатать данные, полученные в терминале, он всегда печатает опцию по умолчанию. Я не получаю ошибку, я хочу напечатать данные, соответствующие ключу "тег", который является "тестированием", но дает опцию по умолчанию. Пожалуйста, помогите мне узнать мою ошибку.

ВЫХОД в терминале

Quit the server with CTRL-BREAK.
[01/May/2020 19:09:02] "GET /shop/check/ HTTP/1.1" 200 1091
printing default
<QueryDict: {}>
[01/May/2020 19:09:02] "POST /shop/checkdb/ HTTP/1.1" 200 5

Я использую Django 3.0.4 Спасибо и извините, если есть какая-то глупая ошибка, я новичок ie в Django

1 Ответ

0 голосов
/ 02 мая 2020

Согласно моему запросу на исследование. POST не будет работать, он работает только при наличии данных формы, я решил проблему доступа к данным с помощью

 data = json.loads(request.body.decode("utf-8"))
 tag = data['tag']
 print(data)
 print(tag)

и использования json .loads () сначала вы должны import json модуль.

...