django解决跨域请求的问题详解


Posted in Python onJanuary 20, 2019

解决方案

1.安装django-cors-headers

pip install django-cors-headers

2.配置settings.py文件

INSTALLED_APPS = [
  ...
  'corsheaders',
  ...
 ] 

MIDDLEWARE_CLASSES = (
  ...
  'corsheaders.middleware.CorsMiddleware',
  'django.middleware.common.CommonMiddleware', # 注意顺序
  ...
)
#跨域增加忽略
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = (
  '*'
)

CORS_ALLOW_METHODS = (
  'DELETE',
  'GET',
  'OPTIONS',
  'PATCH',
  'POST',
  'PUT',
  'VIEW',
)

CORS_ALLOW_HEADERS = (
  'XMLHttpRequest',
  'X_FILENAME',
  'accept-encoding',
  'authorization',
  'content-type',
  'dnt',
  'origin',
  'user-agent',
  'x-csrftoken',
  'x-requested-with',
  'Pragma',
)

OK!问题解决!

其他解决方案

另外还从网上看到其他两种解决方案,但都不太合适。在此列出,供大家参考

1.使用JSONP

使用Ajax获取json数据时,存在跨域的限制。不过,在Web页面上调用js的script脚本文件时却不受跨域的影响,JSONP就是利用这个来实现跨域的传输。因此,我们需要将Ajax调用中的dataType从JSON改为JSONP(相应的API也需要支持JSONP)格式。

JSONP只能用于GET请求。

2.直接修改Django中的views.py文件

修改views.py中对应API的实现函数,允许其他域通过Ajax请求数据: 

def myview(_request): 
response = HttpResponse(json.dumps({“key”: “value”, “key2”: “value”})) 
response[“Access-Control-Allow-Origin”] = “*” 
response[“Access-Control-Allow-Methods”] = “POST, GET, OPTIONS” 
response[“Access-Control-Max-Age”] = “1000” 
response[“Access-Control-Allow-Headers”] = “*” 
return response

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的简单文件传输服务器和客户端
Apr 08 Python
在Python中处理字符串之isdecimal()方法的使用
May 20 Python
Django中的“惰性翻译”方法的相关使用
Jul 27 Python
Python网络爬虫项目:内容提取器的定义
Oct 25 Python
python实现决策树、随机森林的简单原理
Mar 26 Python
python3+PyQt5实现自定义窗口部件Counters
Apr 20 Python
浅谈numpy生成数组的零值问题
Nov 12 Python
Python实现的调用C语言函数功能简单实例
Mar 13 Python
python实现宿舍管理系统
Nov 22 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
Mar 08 Python
ASP.NET Core中的配置详解
Feb 05 Python
matplotlib绘制正余弦曲线图的实现
Feb 22 Python
python 切换root 执行命令的方法
Jan 19 #Python
在Python 不同级目录之间模块的调用方法
Jan 19 #Python
python导入模块交叉引用的方法
Jan 19 #Python
python添加模块搜索路径和包的导入方法
Jan 19 #Python
python引用(import)某个模块提示没找到对应模块的解决方法
Jan 19 #Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
Jan 19 #Python
在pycharm 中添加运行参数的操作方法
Jan 19 #Python
You might like
强烈推荐:php.ini中文版(2)
2006/10/09 PHP
PHP实现单例模式最安全的做法
2014/06/13 PHP
PHP中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
2014/08/25 PHP
使用prototype.js进行异步操作
2007/02/07 Javascript
利用js跨页面保存变量做菜单的方法
2008/01/17 Javascript
jQuery实现移动 和 渐变特效的点击事件
2015/02/26 Javascript
jQuery基本选择器(实例及表单域value的获取方法)
2016/05/20 Javascript
详解JavaScript跨域总结与解决办法
2016/10/31 Javascript
JS打印彩色菱形的实例代码
2018/08/15 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
2019/07/03 Javascript
Element Alert警告的具体使用方法
2020/07/27 Javascript
解决iView Table组件宽度只变大不变小的问题
2020/11/13 Javascript
Python实现向QQ群成员自动发邮件的方法
2014/11/19 Python
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
浅谈python为什么不需要三目运算符和switch
2016/06/17 Python
Python处理json字符串转化为字典的简单实现
2016/07/07 Python
python 读取txt中每行数据,并且保存到excel中的实例
2018/04/29 Python
Python实现微信翻译机器人的方法
2019/08/13 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
Python实现钉钉订阅消息功能
2020/01/14 Python
python如何支持并发方法详解
2020/07/25 Python
html5的新增的标签和废除的标签简要概述
2013/02/20 HTML / CSS
Original Penguin美国官网:布拉德皮特、强尼德普喜爱的服装品牌
2016/10/25 全球购物
德国购买健身器材:AsVIVA
2017/08/09 全球购物
比利时买床:Beter Bed
2017/12/06 全球购物
英国领先的鞋类零售商:Shoe Zone
2018/12/13 全球购物
航空大学应届生求职信
2013/11/10 职场文书
如何写好建议书
2014/03/13 职场文书
师范生见习报告
2014/10/31 职场文书
父亲去世追悼词
2015/06/23 职场文书
学风建设主题班会
2015/08/17 职场文书
Python连续赋值需要注意的一些问题
2021/06/03 Python
使用 CSS 轻松实现一些高频出现的奇形怪状按钮
2021/12/06 HTML / CSS