【问题标题】:Access Python Rest API using AJAX jQuery使用 AJAX jQuery 访问 Python Rest API
【发布时间】: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 并实施正确的身份验证。 stackoverflow.com/questions/11374382/…
  • GET 请求不需要 CSRF 令牌。
  • 我尝试不使用 CSRF 和使用 CSRF 两种方式我都得到了上面代码的空白页面。

标签: jquery python ajax django rest


【解决方案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
猜你喜欢
  • 2016-10-26
  • 1970-01-01
  • 1970-01-01
  • 2013-01-26
  • 2019-05-17
  • 2013-12-29
  • 1970-01-01
  • 1970-01-01
  • 2020-07-30
相关资源
最近更新 更多