使用 AJAX jQuery 访问 Python Rest API
Posted
技术标签:
【中文标题】使用 AJAX jQuery 访问 Python Rest API【英文标题】:Access Python Rest API using AJAX jQuery 【发布时间】:2017-11-08 16:05:42 【问题描述】:我不知道python。 我只是请求使用 jQuery 和 AJAX 的 Python REST API。
到目前为止,这是我的代码:
<!DOCTYPE html>
<html>
<head>
<title>Announcements</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>
<body>
<div id="announcements">
</div>
<script>
$(document).ready(function()
$.ajax(
dataType: "json",
method: "GET",
url: "/mhtsessions/annoucements/",
data:
csrfmiddlewaretoken: getCookie('csrftoken')
,
success: function(data)
$("#announcements").html(data);
);
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 = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) === (name + '='))
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
return cookieValue;
);
</script>
</body>
</html>
我还需要传递 CSRF Token
才能访问 API。CSRF Token 由 Django Rest Framework 生成。
这个Question看过了,不是我的情况,还需要通过CSRF Token
。
编辑:
另外,我在 POSTMAN 中的JSON
中收到了回复,我只需要 JS 或 AJAX 代码即可将其展示给用户。
【问题讨论】:
API 开发人员需要为请求禁用 CSRF 并实施正确的身份验证。 ***.com/questions/11374382/… GET 请求不需要 CSRF 令牌。 我尝试不使用CSRF
和使用 CSRF
两种方式我都得到了上面代码的空白页面。
【参考方案1】:
实际上,您不需要将 csrf_token 用于 GET 请求(不意味着更改数据库中的数据的请求)。我将使用 jquery 为 POST 请求编写一个工作示例。
$('.deleteCheckpoint').click(function(e)
e.preventDefault();
$.ajax(
type: "POST",
url: 'checkpoint/delete/',
data:
csrfmiddlewaretoken: getCookie('csrftoken')
,
success: function()
notification_message('Checkpoint was succesfully deleted');
);
);
getCookie函数来自官方文档https://docs.djangoproject.com/en/1.11/ref/csrf/
确保您已经使用 csrf_token 存储了 cookie,如果您还没有在 html 页面中包含 % csrf_token %。 Django 会自动将 csrf_token 存储在浏览器中,因此 getCookie 函数将返回正确的值。
【讨论】:
如我之前所说,我不懂 Python,并尝试了您的解决方案,它说getCookie ()
未定义。
其实不是python,而是javascript。因此,您需要创建一个文件(px main.js)将其包含在您的模板中()并添加上面的函数链接。
我在 cookie 中有csrftoken
,我已经添加了getCookie()
,仍然没有。 :(
在你的终端,你能看到请求吗?像上面这样的一条线。 [07/Jun/2017 13:29:36]“GET /mhtsessions/annoucements/HTTP/1.1”200 7706
更新了问题,我看到的是 625 而不是 7706,我正在尝试 GET
,而不是 POST
。以上是关于使用 AJAX jQuery 访问 Python Rest API的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jQuery/AJAX 访问 views.py 中的变量?
Jquery Tooltipster - ajax 后访问 DOM
django - ajax - 从 jquery/ajax 调用 python 函数