如何在 Django 中正确捕获获取请求

How to properly catch fetch request in django

开始学习django

我有 js 代码,当我点击按钮时调用 fetch

button = document.querySelector('.button')
button.addEventListener('click', function(){
    fetch('http://127.0.0.1:8000/test_fetch/',
{   
    method: 'GET',
    headers: {
        'Content-Type': 'application/json',
        "X-Requested-With": "XMLHttpRequest",
        "HTTP_X_REQUESTED_WITH": "XMLHttpRequest"
    }
})
})

<!DOCTYPE html>
{% load static %}
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <button class="button">hello</button>
   
    {{ ajax }}
    <script src="{% static 'train_app/js/test_fetch.js' %}"></script>
</body>
class TestFetch(TemplateView):
    template_name = 'train_app/test_fetch.html'
    
    def get(self, request):
        ajax = request.headers
        data = {
            'name': 'Yura',
            'age': 20,
            'list': [1,2,3,4], 
            'ajax': ajax
        }
        
            
        return render(request, self.template_name, context=data)

我尝试使用 request.META 和 request.headers 捕获获取请求。但是他们 return 给我的信息只是关于通过 urls.py.

引起的第一个 get 请求的信息

如何获取有关这是提取请求及其 Content-Type 属性的信息。

在 'http://127.0.0.1:8000/test_fetch/' 的 get 方法中,我认为你定义了一个渲染函数。

所以,如果你想通过get方法获取数据,你应该定义新的api.

例如

views.py

from django.http import JsonResponse

class TestFetch(TemplateView):
    ...

def get_json_data(request):
    ajax = request.headers
    data = {
        'name': 'Yura',
        'age': 20,
        'list': [1,2,3,4], 
        'ajax': ajax
    }
    return JsonResponse(data)

urls.py

urlpatterns = [
    path("test_fetch/", TestFetch..., name="mainpage"),
    path("test_data/", get_json_data, name="get_data"),
]

test_fetch.js

button = document.querySelector('.button')
button.addEventListener('click', function(){
    fetch("{% url 'get_data' %}", // It is recommended not to use the absolute path as it will interfere with deployment.
{   
    method: 'GET',
    headers: {
        'Content-Type': 'application/json',
        "X-Requested-With": "XMLHttpRequest",
        "HTTP_X_REQUESTED_WITH": "XMLHttpRequest"
    }
})
})

What is the JsonResponse

What is {% url %}?