python - 使用 Fetch Api 从 JavaScript 访问 Django View 数据
问题描述
我正在尝试使用 fetch API 从 Django 视图获取数据,但 fetch API 没有到达 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 视图中打印的尝试登录。我认为 fetch 中的 URL 存在一些问题。我是 Django 新手,请在这方面帮助我
解决方案
我遇到了类似的问题,但下面的代码对于Django 3.1.4 和 Python 3.8 中的get和post请求都可以正常工作。
//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')
笔记:
我之前拆分了我的视图并忘记从主视图文件中删除原始视图函数,这似乎是我的案例中错误的原因。
推荐阅读
- php - 如何将标准 php 函数传递给 array_map 和 array_filter?
- javascript - 理解 Javascript 中的 Promise
- c++ - 嵌套if else语句c ++
- matlab - 如何在不获取单个元素的情况下将数组按元素分配给数组?
- linux - 用于匹配列并将新列从文件添加到表中的 shell 脚本
- hibernate - hbernate org.hibernate.PersistentObjectException:未初始化的代理传递给 org.hibernate.event.internal.DefaultSave 的 save()
- vba - 试图从工作表子调用模块子:'运行时错误:1004'
- spotipy - 无效的 spotipy 重定向 URL
- android - Xamarin Android 项目中不存在类型或命名空间名称“支持”
- delphi - Firedac 更改警报器