使用 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 TokenDjango 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的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 抓取 Ajax

如何使用 jQuery/AJAX 访问 views.py 中的变量?

Jquery Tooltipster - ajax 后访问 DOM

django - ajax - 从 jquery/ajax 调用 python 函数

我们可以在跨域中使用 Jquery $.ajax() 调用通过 https 访问 WCF 服务吗?

jQuery:跨域 AJAX 调用导致“访问受限 URI 被拒绝”(代码 1012)