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 时间处理datetime实例
Sep 06 Python
浅析Python多线程下的变量问题
Apr 28 Python
Python中的默认参数详解
Jun 24 Python
CentOS 6.5下安装Python 3.5.2(与Python2并存)
Jun 05 Python
python使用super()出现错误解决办法
Aug 14 Python
基于python select.select模块通信的实例讲解
Sep 21 Python
Python编程实现二分法和牛顿迭代法求平方根代码
Dec 04 Python
详解PyTorch批训练及优化器比较
Apr 28 Python
selenium + python 获取table数据的示例讲解
Oct 13 Python
python调用虹软2.0第三版的具体使用
Feb 22 Python
基于Python数据分析之pandas统计分析
Mar 03 Python
python爬虫中PhantomJS加载页面的实例方法
Nov 12 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写出自己的BLOG系统 2
2010/04/12 PHP
php数组函数序列之asort() - 对数组的元素值进行升序排序,保持索引关系
2011/11/02 PHP
ThinkPHP模板中数组循环实例
2014/10/30 PHP
PHP中include和require的区别实例分析
2017/05/07 PHP
thinkPHP5框架闭包函数与子查询传参用法示例
2018/08/02 PHP
javascript 关于# 和 void的区别分析
2009/10/26 Javascript
dess中一个简单的多路委托的实现
2010/07/20 Javascript
jQuery-Tools-overlay 使用介绍
2012/07/14 Javascript
jQuery实现多按钮单击变色
2014/11/27 Javascript
使用jquery菜单插件HoverTree仿京东无限级菜单
2014/12/18 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
纯Javascript实现ping功能的方法
2015/03/20 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
基于Bootstrap仿淘宝分页控件实现代码
2016/11/07 Javascript
基于JavaScript 性能优化技巧心得(分享)
2017/12/11 Javascript
通过vue提供的keep-alive减少对服务器的请求次数
2018/04/01 Javascript
在vue项目中引入高德地图及其UI组件的方法
2018/09/04 Javascript
[43:24]VG vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
简单的编程0基础下Python入门指引
2015/04/01 Python
Python set常用操作函数集锦
2017/11/15 Python
Django model update的多种用法介绍
2020/03/28 Python
Python二元赋值实用技巧解析
2019/10/25 Python
Python实现图片裁剪的两种方式(Pillow和OpenCV)
2019/10/30 Python
Django如何使用redis作为缓存
2020/05/21 Python
详解前端HTML5几种存储方式的总结
2016/12/27 HTML / CSS
最新的小工具和卓越的产品设计:Oh That Tech!
2019/08/07 全球购物
促销活动总结模板
2014/07/01 职场文书
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
求职自荐信怎么写
2015/03/04 职场文书
车间统计员岗位职责
2015/04/14 职场文书
2015年秘书个人工作总结
2015/04/25 职场文书
反腐倡廉心得体会2016
2016/01/13 职场文书
详解nginx location指令
2022/01/18 Servers
python 详解turtle画爱心代码
2022/02/15 Python
MySQL限制查询和数据排序介绍
2022/03/25 MySQL