使用fetchapi从JavaScript访问Django视图数据

2024-06-16 11:36:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用fetchapi从Django视图获取数据,但是fetchapi没有到达Django视图


    function connect(username) {
    alert('connect');
    let promise = new Promise((resolve, reject) => {
        // get a token from the back end
        let data;
        alert("before append")

        // data.append('csrfmiddlewaretoken', $('#csrf- 
      helperinput[name="csrfmiddlewaretoken"]').attr('value'));
        alert("vc")
        fetch("/videocall/", {
            method: 'POST',
            // headers: {
            //     "X-CSRFToken": getCookie("csrftoken"),
            //     "Accept": "application/json",
            //     "Content-Type": "application/json"
            // },
            headers:{
                'Accept': 'application/json',
                'X-Requested-With': 'XMLHttpRequest', //Necessary to work with request.is_ajax()
                'X-CSRFToken': csrftoken,
            },
            //credentials: "same-origin",
            body: JSON.stringify({'username': username})
        }).then(res => res.json()).then(_data => {
            // join video call
            alert("Joint")
            data = _data;
            return Twilio.Video.connect(data.token);
        }).then(_room => {
          alert("room")
            room = _room;
            room.participants.forEach(participantConnected);
            room.on('participantConnected', participantConnected);
            room.on('participantDisconnected', participantDisconnected);
            connected = true;
            updateParticipantCount();
            connectChat(data.token, data.conversation_sid);
            resolve();
        }).catch(e => {
          alert("catch")
            console.log(e);
            reject();
        });
        alert(promise)

    });
    return promise;
    };

这是我对django的看法


    def videocall(request):
    print("Trying to login")
    if request.method == "POST":
        print("Trying to login")
   

它甚至没有打印我在django视图中打印的尝试登录。我认为在获取中URL存在一些问题。 我是Django的新手,请在这方面帮助我


Tags: todjangotoken视图jsondataapplicationrequest
1条回答
网友
1楼 · 发布于 2024-06-16 11:36:58

我有一个类似的问题,但是下面的代码对于Django3.1.4和Python3.8中的getpost请求都运行良好

//js
const AssignStaffForm = () => {
  fetch('/app/get_users/', {
    method: "GET",
    credentials: "same-origin",
    headers: {
      Accept: "application/json",
      "X-Requested-With": "XMLHttpRequest",
      "X-CSRFToken": getCookie("csrftoken"),
    },
  })
    .then((res) => res.json())
    .then((data) => {
        // then I use this data in an html form.
        console.log(data)
    })
    .catch((err) => {
      console.log("err in fetch", err);
    });
};

#url dispatcher
path('get_users/', views.get_users, name='get_users'),


#view
import json
from django.http.response import HttpResponse

def get_users(request):
    if request.method == 'GET':
        users=[]
        for user in User.objects.all():
            users.append({'id':user.id, 'name': user.get_full_name()})
        data = json.dumps({'users': users})
        return HttpResponse(data, content_type='application/json')

注:

我之前分割了我的视图,忘记了从主视图文件中删除原始视图函数,这似乎是我的案例中出现错误的原因

相关问题 更多 >