Django 模板中使用 Ajax POST

解决 Forbidden (CSRF token missing or incorrect.) 报错的解决方案

在以Django作为后端的项目开发中,前端的js按照往常使用阿贾克斯(ajax)-POST请时求往往会产生跨站请求伪造相关的报错。这里忽略该错误具体来龙去脉,仅通过以下代码示范如何让Dajngo后端成功接受到来自前端的POST请求信息。

这里需要用到一个js库,其官方github地址为
https://github.com/js-cookie/js-cookie/

// 引用js.cookie.min.js或将其代码完整添加到此
/*! js-cookie v3.0.0-rc.1 | MIT */
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self,function(){var n=e.Cookies,r=e.Cookies=t();r.noConflict=function(){return e.Cookies=n,r}}())}(this,function(){"use strict";function e(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)e[r]=n[r]}return e}var t={read:function(e){return e.replace(/(%[\dA-F]{2})+/gi,decodeURIComponent)},write:function(e){return encodeURIComponent(e).replace(/%(2[346BF]|3[AC-F]|40|5[BDE]|60|7[BCD])/g,decodeURIComponent)}};return function n(r,o){function i(t,n,i){if("undefined"!=typeof document){"number"==typeof(i=e({},o,i)).expires&&(i.expires=new Date(Date.now()+864e5*i.expires)),i.expires&&(i.expires=i.expires.toUTCString()),t=encodeURIComponent(t).replace(/%(2[346B]|5E|60|7C)/g,decodeURIComponent).replace(/[()]/g,escape),n=r.write(n,t);var c="";for(var u in i)i[u]&&(c+="; "+u,!0!==i[u]&&(c+="="+i[u].split(";")[0]));return document.cookie=t+"="+n+c}}return Object.create({set:i,get:function(e){if("undefined"!=typeof document&&(!arguments.length||e)){for(var n=document.cookie?document.cookie.split("; "):[],o={},i=0;i<n.length;i++){var c=n[i].split("="),u=c.slice(1).join("=");'"'===u[0]&&(u=u.slice(1,-1));try{var f=t.read(c[0]);if(o[f]=r.read(u,f),e===f)break}catch(e){}}return e?o[e]:o}},remove:function(t,n){i(t,"",e({},n,{expires:-1}))},withAttributes:function(t){return n(this.converter,e({},this.attributes,t))},withConverter:function(t){return n(e({},this.converter,t),this.attributes)}},{attributes:{value:Object.freeze(o)},converter:{value:Object.freeze(r)}})}(t,{path:"/"})});const csrftoken = Cookies.get('csrftoken');
/*再进行ajax POST请求*/
$.ajax({type:'POST',                         // 指定请求的方法data:youdata,                        // 请求提交的数据headers: {'X-CSRFToken': csrftoken}, // 很重要,设置请求头,提交Django时必须url: yoururl,                        // 你的请求提交url,必须dataType: JSON,                      // 数据格式可以为xml、json、script 或 html,默认自动判断。success:function(result){},          // 请求成功时的回调函数,完整格式为success(data, textStatus, jqXHR)error:function(XMLHttpRequest, textStatus, errorThrown){}                   // 请求失败时的回调函数
},

其中,也可以单独引用 js.cookie.min.js:

<script src="https://cdn.jsdelivr.net/npm/js-cookie@rc/dist/js.cookie.min.js"></script>

如需了解更多内容,推荐阅读Django文档的“跨站请求伪造保护”相关内容。

Django 模板中使用 Ajax POST相关推荐

  1. Django 模板中使用css, javascript

    Django 模板中使用css, javascript (r'^css/(?Ppath.*)$', 'django.views.static.serve', {'document_root': '/v ...

  2. Django模板中如何将函数的变量作为字典key并获取对应的value

    Django模板中如何将函数的变量作为字典key并获取对应的value 问题 现有一字典 mydict = {'abc': 123} key = 'abc' 传入到模板后 在模板html中你可能像下面 ...

  3. [Django]网页中利用ajax实现批量导入数据功能

    url.py代码: url(r'^workimport/$', 'keywork.views.import_keywork', name='import_keywork') view.py代码: fr ...

  4. Django 模板中 变量 过滤器 标签 的使用方法

    一.变量 1.变量的形式是:{{variable}}, 当模板引擎碰到变量的时候,引擎使用变量的值代替变量.     2.使用dot(.)能够访问变量的属性     3.当模板引擎碰到dot的时候,查 ...

  5. Django 模板中变量、过滤器、标签的使用方法

    2019独角兽企业重金招聘Python工程师标准>>> 一.变量 1.变量的形式是:{{variable}}, 当模板引擎碰到变量的时候,引擎使用变量的值代替变量. 2.使用dot( ...

  6. python endif_在Django模板中的 if else endif

    if/else {% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统会显示在 {% if %} 和 {% endif %} 之间的任何内容 ...

  7. django模板中引入CSS和JS

    django中的模板功能非常强大,但是在django的模板中引入css和js要怎么处理呢,这个还是真的和普通的网页不太一样.因为在django中一般用来存放的模板的目录为template目录(注意:这 ...

  8. django模板中for语句同时遍历两个列表

    首先,如果在模板中直接遍历两个列表是会报错的,因为不支持. 那么,我们怎么解决? 有办法,在视图中先把两个列表用zip()函数打包即可,这样,就可以在模板中对两个列表同时for输出了 视图: def ...

  9. django模板中使用JQ代码实现瀑布流显示效果

    settings中的配置不再详细说明 一.路由代码 from django.contrib import admin from django.conf.urls import url from app ...

最新文章

  1. sqlplus 修改system密码_华为交换机console密码忘了如何解决 华为交换机console密码忘了解决方法【介绍】...
  2. mysql slave 1062_MySQL主从不同步,出现1062错误解决方案
  3. 吴恩达深度学习的改善深层神经网络编程作业:优化Optimization
  4. (转)那些年,被自己的技术者思维虐过的项目经理们
  5. 异常连接导致的内存泄漏排查
  6. SQL中FOR XML子句的各种用法,包括FOR XML字句的四种基本模式:AUTO模式、RAW模式、PATH模式和EXPLICIT模式...
  7. 基于Python/PYQT5的动物识别专家系统(人工智能实验)
  8. Java基本数据类型有哪些
  9. 一次做数据报表的踩坑经历,让我领略了数据同步增量和全量的区别
  10. java找不到指定路径_java创建文件时提示找不到指定路径的解决方法
  11. java单继承多实现_单继承,多实现
  12. python桌面程序臃肿_危险的转变:Python正在从简明转向臃肿,从实用转向媚俗
  13. 服务器IIS6/IIS7、Nginx、Apache屏蔽垃圾爬虫UA禁止垃圾爬虫,屏蔽指定UA
  14. 个人管理 - 如何演讲
  15. 加入7654联盟,一次装机,终身领工资!
  16. 移动硬盘写速度不到1M
  17. 计算机电源德国产,德国原装崇拜者来一发?BeQuiet! Straight Power 11全模电源
  18. 365天口才训练计划
  19. 禁用计算机的网络连接无线网络连接,电脑设置了禁用网络,连接不上WIFI.怎么解除...
  20. OPPO手机怎么找到快应用入口

热门文章

  1. 计算机系统内部五大部件的主要连接关系总结
  2. 浮点数的加减计算总结
  3. Matlab之字符串的查找(findstr)与替换(strrep)
  4. ubuntu16.04使用ipv6
  5. C# 使用 GDI+ 实现添加中心旋转(任意角度)的文字
  6. C#多线程编程实战(二)
  7. 怎么给iOS项目打包
  8. 项目总结25:海康威视SDK-Java二次开发-客流量分析
  9. ASP.NET MVC 5 ABP DataTables (二)
  10. zookeeper选举机制及相关概念