`
nswish
  • 浏览: 106636 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Django框架下如何使用ajax的post方法

阅读更多

      今天在尝试调用jQuery的ajax时发现一个问题,就是使用GET方法服务器可以正常返回,但是使用POST方法却不行。后来再测试表单方式的POST的方法也不行。只要POST必报HTTP 403错误!非常奇怪。。。

      在网上搜了一大堆资料以后原来是因为Django的Cross Site Request Forgery protection机制的问题。这个机制是为了保护不受csrf攻击。解决方案Django的官网已经提供了http://docs.djangoproject.com/en/dev/ref/contrib/csrf/,根据说明修改后,ajax可以顺利Post了。

      具体办法是,首先解决表单的POST。在settings.py文件中找到 MIDDLEWARE_CLASSES,在其中加入一个中间件:'django.middleware.csrf.CsrfViewMiddleware' ,修改后的代码如下:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.csrf.CsrfResponseMiddleware', #加入这个中间件
)

 

     经过这番修改,可以解决表单方式的POST提交HTTP 403问题了。ajax的Post提交仅这样改还不行。还需要钩上一个每次提交时的cookie处理过程。也就是每次提交的时候,都触发这个过程,在提交的http头上加入csrf token。不过还好,如果你是用jQuery来处理ajax的话,Django直接送了一段解决问题的代码。把它放在一个独立的js文件中,在html页面中都引入即可。注意这个js文件必须在jquery的js文件引入之后,再引入。代码我直接复制过来了,如下:

 

$('html').ajaxSend(function(event, xhr, settings) {
    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;
    }
    if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
        // Only send the token to relative URLs i.e. locally.
        xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
    }
});

 

 

    经过这番折腾,算是可以正常用ajax与Django通信了。

0
3
分享到:
评论

相关推荐

    Django框架如何使用ajax的post方法

    但使用Django框架时,常常会遇到一个问题:使用GET方法可以正常工作,但POST方法却无法成功提交数据,返回HTTP403错误。这个问题通常与Django的跨站请求伪造保护(Cross-Site Request Forgery Protection,简称CSRF ...

    基于Python Django框架的jQuery AJAX交互源码实现

    项目概述:本项目是基于Python中流行的Django框架,结合jQuery AJAX技术实现的前后端交互应用。通过使用POST和GET请求,实现了数据的异步处理。项目主要采用Python语言编写,同时包含了JavaScript、HTML、Shell、CSS...

    Django解决Ajax中post提交数据403的代码

    在使用Django框架进行Web开发时,Ajax技术常被用于实现页面无刷新更新,提高用户体验。然而,在使用Ajax向Django后端发送POST请求时,可能会遇到403 Forbidden错误,提示“CSRF token missing or incorrect.”。这个...

    Django结合ajax进行页面实时更新的例子

    本文将详细讲解如何在Django框架下利用Ajax实现数据的动态更新。 首先,我们需要理解Django和Ajax的基本概念。Django是一个Python Web框架,用于快速构建安全、可维护的网站。而Ajax(Asynchronous JavaScript and ...

    django ajax异步请求Django的Ajax库3813428.zip

    在本文中,我们将深入探讨Django框架中使用Ajax进行异步请求的相关知识。Ajax(Asynchronous JavaScript and XML)技术允许Web应用在不刷新整个页面的情况下与服务器交换数据并更新部分网页内容,极大地提升了用户...

    安全开发 | 如何让Django框架中的CSRF_Token通过AJAX的POST请求后端服务

    用过Django 进行开发的同学都知道,Django框架天然支持对CSRF攻击的防护,因为其内置了一个名为CsrfViewMiddleware的中间件,其基于Cookie方式的防护原理,相比基于session的方式,更适合目前前后端分离的业务场景。...

    基于Django框架,使用Django REST framework前后端分离技术搭建的网上图书商店.zip

    【标题】:基于Django框架,使用Django REST framework实现前后端分离的网上图书商店 【描述】:这个项目是一个采用Python的Django框架和Django REST framework构建的网上图书商店,实现了完整的前后端分离。它展示...

    elasticsearch+django搜索框架

    使用Django的`post_save`信号处理程序或自定义管理命令,确保数据更改时同步到Elasticsearch。 6. 用户界面:在Django视图中实现搜索功能,接收用户查询,调用Elasticsearch查询API,返回结果。在模板中展示搜索...

    Django和前端用ajax传输json等数据.docx

    在本文中,我们将深入探讨如何在Django框架中与前端使用Ajax进行JSON数据的传输。Ajax(Asynchronous JavaScript and XML)是一种在不刷新整个页面的情况下更新部分网页的技术,而JSON(JavaScript Object Notation...

    django中使用jquery ajax post数据出现403错误的解决办法(两种方法)

    在Django框架中使用jQuery的AJAX POST方法传输数据时,有时会遇到403错误。这种错误通常是由于Django的CSRF(Cross-Site Request Forgery)保护机制引发的。CSRF是一种防止跨站请求伪造的机制,为了安全地保护web...

    django ajax发送post请求的两种方法

    在使用Django框架进行Web开发时,经常需要通过AJAX发送POST请求以实现异步数据交互。本文将详细介绍在Django中如何通过AJAX发送POST请求的两种方法,这两种方法分别涉及到表单中的CSRF Token的使用以及在AJAX请求中...

    基于django框架的博客例子和uploadify插件的例子

    **基于Django框架的博客应用** Django是一个高级的Python Web框架,它鼓励快速开发和清洁、实用的设计。在这个例子中,我们看到一个基于Django的博客应用的实现。Django提供了模型-视图-控制器(MVC)的架构模式,...

    Django JavaScript Integration AJAX and jQuery.pdf

    《Django JavaScript Integration AJAX and jQuery》这本书深入探讨了如何将Django框架与JavaScript技术(包括AJAX和jQuery)进行有效集成,以构建现代化的Web应用。本书不仅适合已经熟悉Django框架并希望进一步提升...

    django框架中ajax的使用及避开CSRF 验证的方式详解

    在Django框架中,使用Ajax可以实现前端与后端的异步交互,提高用户体验,而CSRF(Cross-site request forgery,跨站请求伪造)验证是Django为了防止恶意第三方模拟用户发送请求的一种安全机制。然而,有些情况下,...

    Django之提交表单与前后端交互的方法

    本文将详细介绍在Django框架下,通过GET和POST两种方式提交表单数据的方法,以及前后端之间如何进行有效的数据交互。 #### 二、基础知识回顾 在深入讨论之前,我们先简要回顾一下一些基本概念: - **GET**:主要...

    Django框架利用ajax实现批量导入数据功能

    使用Django框架结合Ajax技术可以实现一个高效且用户体验良好的批量数据导入功能。本文将介绍如何利用Django框架配合Ajax实现批量导入数据的功能,包括后端的视图编写、模型操作以及前端的Ajax请求发送等。 首先需要...

Global site tag (gtag.js) - Google Analytics