Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向Django添加Ajax_Python_Django_Ajax_Asynchronous - Fatal编程技术网

Python 向Django添加Ajax

Python 向Django添加Ajax,python,django,ajax,asynchronous,Python,Django,Ajax,Asynchronous,我在Django项目中构建了一个简单的消息传递系统。当前,用户需要刷新页面以查看新消息。如何添加Ajax以异步加载消息 视图: Messages.html: <h6>Inbox</h6> {% for message in inbox %} <ul> <li title="{{ message.sender.username }}">{{ message.s

我在Django项目中构建了一个简单的消息传递系统。当前,用户需要刷新页面以查看新消息。如何添加Ajax以异步加载消息

视图:

Messages.html:

<h6>Inbox</h6>
        {% for message in inbox %}
            <ul>
                <li title="{{ message.sender.username }}">{{ message.sender.first_name }}: {{ message.msg_content }}
                    <button onclick="myFunction()">Reply</button>
                </li>
                <small>-{{ message.timestamp }}</small>
                <hr>
            </ul>
        {% endfor %}
收件箱
{收件箱%中的邮件为%0}
  • {{{message.sender.first_name}}:{{message.msg_content} 回复
  • -{{message.timestamp}
{%endfor%}
您可以在静态文件夹中创建一个Javascript文件来执行此操作

在发送POST请求时,需要包含CSRF令牌,以便以安全的方式执行此过程。查看Django's了解更多详细信息。第一个函数从cookies获取CSRF令牌:

getCookie(名称){
让cookieValue=null;
if(document.cookie&&document.cookie!=''){
让cookies=document.cookie.split(“;”);
for(设i=0;i
这是用于发送/接收数据的Ajax代码,只是普通的Javascript。当用户首次加载页面时,x秒后(如果其他人发送消息,则显示消息)或用户发送消息后,相同的代码将加载以前的消息:

requestAjax(数据){
//使用上一个函数获取CSRF令牌
让csrftoken=getCookie('csrftoken');
//启动新的AJAX请求
const request=new XMLHttpRequest();
open('POST','/addmessages/',true);
//使用CSRF令牌代码设置请求标头
setRequestHeader('X-CSRFToken',CSRFToken);
setRequestHeader('contentType','application/json;charset=utf-8');
//请求完成时的回调函数
request.onload=()=>{
//服务器返回一个请求对象
const serverResponse=JSON.parse(request.responseText);
//请求对象包含一个带有布尔值的“success”键,用于指示请求是否成功
if(serverResponse.success){
//如果“成功”,则显示收到的消息
}
否则{
//如果“success”为false,则表示存在服务器端错误,请显示错误消息
}
}
//将消息接收器和消息内容发送到服务器
request.send(JSON.stringify(data));
}

您可以在静态文件夹中创建一个Javascript文件来执行此操作

在发送POST请求时,需要包含CSRF令牌,以便以安全的方式执行此过程。查看Django's了解更多详细信息。第一个函数从cookies获取CSRF令牌:

getCookie(名称){
让cookieValue=null;
if(document.cookie&&document.cookie!=''){
让cookies=document.cookie.split(“;”);
for(设i=0;i
这是用于发送/接收数据的Ajax代码,只是普通的Javascript。当用户首次加载页面时,x秒后(如果其他人发送消息,则显示消息)或用户发送消息后,相同的代码将加载以前的消息:

requestAjax(数据){
//使用上一个函数获取CSRF令牌
让csrftoken=getCookie('csrftoken');
//启动新的AJAX请求
const request=new XMLHttpRequest();
open('POST','/addmessages/',true);
//使用CSRF令牌代码设置请求标头
setRequestHeader('X-CSRFToken',CSRFToken);
setRequestHeader('contentType','application/json;charset=utf-8');
//请求完成时的回调函数
request.onload=()=>{
//服务器返回一个请求对象
const serverResponse=JSON.parse(request.responseText);
//请求对象包含一个带有布尔值的“success”键,用于指示请求是否成功
if(serverResponse.success){
//如果“成功”,则显示收到的消息
}
否则{
//如果“success”为false,则表示存在服务器端错误,请显示错误消息
}
}
//将消息接收器和消息内容发送到服务器
request.send(JSON.stringify(data));
}

这是否回答了您的问题?这回答了你的问题吗?创建这些函数后,我在哪里调用它们?在视图或html?中,这些是Javascript函数,因此您无法在使用Python的view.py文件中调用它们。理想情况下,您可以创建一个script.js文件并将前端逻辑放在那里。或者,在创建这些函数后,可以使用html文件上的脚本标记添加它们,我在哪里调用它们?在视图或html?中,这些是Javascript函数,因此您无法在使用Python的view.py文件中调用它们。理想情况下,您可以创建一个script.js文件并将前端逻辑放在那里。或者您可以使用html文件上的脚本标记添加它们
<h6>Inbox</h6>
        {% for message in inbox %}
            <ul>
                <li title="{{ message.sender.username }}">{{ message.sender.first_name }}: {{ message.msg_content }}
                    <button onclick="myFunction()">Reply</button>
                </li>
                <small>-{{ message.timestamp }}</small>
                <hr>
            </ul>
        {% endfor %}