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读csv文件去掉一列后再写入新的文件实例
Dec 28 Python
Python爬虫工程师面试问题总结
Mar 22 Python
对python中的 os.mkdir和os.mkdirs详解
Oct 16 Python
使用Python获取并处理IP的类型及格式方法
Nov 01 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
Python定时任务工具之APScheduler使用方式
Jul 24 Python
将python包发布到PyPI和制作whl文件方式
Dec 25 Python
python 输出列表元素实例(以空格/逗号为分隔符)
Dec 25 Python
浅谈matplotlib.pyplot与axes的关系
Mar 06 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
Mar 24 Python
Python爬虫爬取全球疫情数据并存储到mysql数据库的步骤
Mar 29 Python
7个关于Python的经典基础案例
Nov 07 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
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
2014/06/26 PHP
PHP入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
2016/11/02 PHP
PHP页面跳转实现延时跳转的方法
2016/12/10 PHP
PHP基于堆栈实现的高级计算器功能示例
2017/09/15 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
使用javascript实现页面定时跳转总结篇
2013/09/21 Javascript
基于jquery插件实现常见的幻灯片效果
2013/11/01 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
js实现网页倒计时、网站已运行时间功能的代码3例
2014/04/14 Javascript
jQuery动画出现连续触发、滞后反复执行的解决方法
2015/01/28 Javascript
JavaScript获取页面中第一个锚定文本的方法
2015/04/03 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
2016/11/26 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
详解如何使用router-link对象方式传递参数?
2019/05/02 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
2021/03/02 Javascript
[01:22:10]Ti4 循环赛第二日 DK vs Empire
2014/07/11 DOTA
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
在python中使用正则表达式查找可嵌套字符串组
2017/10/24 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
python使用PIL模块获取图片像素点的方法
2019/01/08 Python
Python如何在DataFrame增加数值
2020/02/14 Python
Python识别html主要文本框过程解析
2020/02/18 Python
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
家得宝加拿大家装网上商店:The Home Depot加拿大
2016/08/27 全球购物
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
售后服务经理岗位职责
2014/02/25 职场文书
工程项目建议书范文
2014/03/12 职场文书
迎国庆横幅标语
2014/10/08 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
机关保密工作承诺书
2015/05/04 职场文书
2016年党风廉政建设承诺书
2016/03/25 职场文书
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python
Go语言 go程释放操作(退出/销毁)
2021/04/30 Golang
Jupyter notebook 不自动弹出网页的解决方案
2021/05/21 Python