Django 跨域请求处理的示例代码


Posted in Python onMay 02, 2018

django处理Ajax跨域访问

使用javascript进行ajax访问的时候,出现如下错误

Django 跨域请求处理的示例代码

出错原因:javascript处于安全考虑,不允许跨域访问。下图是对跨域访问的解释:

Django 跨域请求处理的示例代码

概念:

这里说的js跨域是指通过js或python在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(Django)的数据。只要协议、域名、端口有任何一个不同,都被当作是不同的域。

解决办法

1. 修改views.py文件

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

todo_list = [
  {"id": "1", "content": "吃饭"},
  {"id": "2", "content": "吃饭"},
]


class Query(View):
  @staticmethod
  def get(request):
    response = JsonResponse(todo_list, safe=False)
    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

  @staticmethod
  def post(request):
    print(request.POST)
    return HttpResponse()

2. 添加中间件 django-cors-headers

GitHub地址: https://github.com/ottoyiu/django-cors-headers

2.1. 安装 pip install django-cors-headers

2。2 添加app

INSTALLED_APPS = (
  ...
  'corsheaders',
  ...
)

2.3 添加中间件

MIDDLEWARE = [ # Or MIDDLEWARE_CLASSES on Django < 1.10
  ...
  'corsheaders.middleware.CorsMiddleware',
  'django.middleware.common.CommonMiddleware',
  ...
]

2.4 配置允许跨站访问本站的地址

CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = (
   'localhost:63343',
)

# 默认值是全部:
CORS_ORIGIN_WHITELIST = () # 或者定义允许的匹配路径正则表达式.
CORS_ORIGIN_REGEX_WHITELIST = ('^(https?://)?(\w+.)?>google.com$', )  # 默认值:
CORS_ORIGIN_REGEX_WHITELIST = ()

2.5 设置允许访问的方法

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

2.6 设置允许的header:

默认值:

CORS_ALLOW_HEADERS = (
'x-requested-with',
'content-type',
'accept',
'origin',
'authorization',
'x-csrftoken'
)

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

Python 相关文章推荐
python中文乱码的解决方法
Nov 04 Python
python如何获取服务器硬件信息
May 11 Python
python的Crypto模块实现AES加密实例代码
Jan 22 Python
pandas实现选取特定索引的行
Apr 20 Python
对python的文件内注释 help注释方法
May 23 Python
Python高级用法总结
May 26 Python
Django中反向生成models.py的实例讲解
May 30 Python
python3人脸识别的两种方法
Apr 25 Python
将tensorflow模型打包成PB文件及PB文件读取方式
Jan 23 Python
python GUI库图形界面开发之PyQt5窗口布局控件QStackedWidget详细使用方法
Feb 27 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
python工具——Mimesis的简单使用教程
Jan 16 Python
python 按照固定长度分割字符串的方法小结
Apr 30 #Python
Python 内置函数进制转换的用法(十进制转二进制、八进制、十六进制)
Apr 30 #Python
python版本的仿windows计划任务工具
Apr 30 #Python
Python装饰器原理与用法分析
Apr 30 #Python
Python中pillow知识点学习
Apr 30 #Python
Python生成器定义与简单用法实例分析
Apr 30 #Python
Python迭代器定义与简单用法分析
Apr 30 #Python
You might like
PHP 验证码的实现代码
2011/07/17 PHP
模板引擎smarty工作原理以及使用示例
2014/05/25 PHP
php广告加载类用法实例
2014/09/23 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
javascript 屏蔽鼠标键盘的几段代码
2008/01/02 Javascript
javascript 子窗体父窗体相互传值方法
2010/05/31 Javascript
修改好的jquery滚动字幕效果实现代码
2011/06/22 Javascript
javascript 全选与全取消功能的实现代码
2012/12/23 Javascript
使用Js让Html中特殊字符不被转义
2013/11/05 Javascript
jQuery获取节点和子节点文本的方法
2014/07/22 Javascript
jQuery的观察者模式详解
2014/12/22 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
基于cookie实现zTree树刷新后展开状态不变
2017/02/28 Javascript
详解使用Node.js 将txt文件转为Excel文件
2017/07/05 Javascript
Vue子组件向父组件通信与父组件调用子组件中的方法
2018/06/22 Javascript
vue中用 async/await 来处理异步操作
2020/07/18 Javascript
[07:43]《辉夜杯》公开赛晋级外卡赛战队—TRG训练生活探秘
2015/12/11 DOTA
[01:00:25]2018DOTA2亚洲邀请赛3月30日 小组赛A组 VG VS Liquid
2018/03/31 DOTA
在Django的form中使用CSS进行设计的方法
2015/07/18 Python
Django rest framework基本介绍与代码示例
2018/01/26 Python
python创建学生成绩管理系统
2019/11/22 Python
python3.6连接mysql数据库及增删改查操作详解
2020/02/10 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
生物化工工艺专业应届生求职信
2013/10/08 职场文书
药学专业大学生个人的自我评价
2013/11/04 职场文书
好的自荐信包括什么内容
2013/11/07 职场文书
个人生活学习自我评价范文
2013/11/26 职场文书
财务部副经理岗位职责
2014/03/14 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
新教师岗前培训方案
2014/06/05 职场文书
婚庆司仪开场白
2015/05/29 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
Vue h函数的使用详解
2022/02/18 Vue.js
了解MySQL查询语句执行过程(5大组件)
2022/08/14 MySQL