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基础教程之实现石头剪刀布游戏示例
Feb 11 Python
python执行等待程序直到第二天零点的方法
Apr 23 Python
Python中的with...as用法介绍
May 28 Python
Python常用的内置序列结构(列表、元组、字典)学习笔记
Jul 08 Python
Python系统监控模块psutil功能与经典用法分析
May 24 Python
Python使用pickle模块实现序列化功能示例
Jul 13 Python
详解基于django实现的webssh简单例子
Jul 17 Python
Python socket模块实现的udp通信功能示例
Apr 10 Python
Python中正反斜杠(‘/’和‘\’)的意义与用法
Aug 12 Python
Python 写了个新型冠状病毒疫情传播模拟程序
Feb 14 Python
Python 给下载文件显示进度条和下载时间的实现
Apr 02 Python
Python如何实现邮件功能
May 27 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获取qq用户昵称和在线状态(实例分析)
2013/10/27 PHP
php微信公众号开发之快递查询
2018/10/20 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
PHP利用DWZ.CN服务生成短网址
2019/08/11 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
基于JQuery实现异步刷新的代码(转载)
2011/03/29 Javascript
iframe异步加载实现点击左边菜单加载右边内容实例讲解
2013/03/04 Javascript
JS字符串拼接在ie中都报错的解决方法
2014/03/27 Javascript
JQuery实现表格动态增加行并对新行添加事件
2014/07/30 Javascript
详谈javascript中的cookie
2015/06/03 Javascript
第六篇Bootstrap表格样式介绍
2016/06/21 Javascript
Bootstrap表格使用方法详解
2017/02/17 Javascript
jQuery实现 上升、下降、删除、添加一行代码
2017/03/06 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
jQuery简单实现根据日期计算星期几的方法
2019/01/09 jQuery
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
[01:25]DOTA2自定义游戏灵园鬼域等你踏足
2015/10/30 DOTA
[00:36]DOTA2上海特级锦标赛 Archon战队宣传片
2016/03/04 DOTA
介绍Python的@property装饰器的用法
2015/04/28 Python
Python判断字符串与大小写转换
2015/06/08 Python
通过Python使用saltstack生成服务器资产清单
2016/03/01 Python
详解CSS3媒体查询响应式布局bootstrap 框架原理实战(推荐)
2020/11/16 HTML / CSS
西班牙在线宠物食品和配件商店:bitiba
2019/10/11 全球购物
力学专业毕业生自荐信
2013/11/17 职场文书
建设工地安全标语
2014/06/07 职场文书
伦敦奥运会的口号
2014/06/21 职场文书
新闻学专业求职信
2014/07/28 职场文书
机关党总支领导班子整改方案
2014/09/20 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
个人委托函范文
2015/01/29 职场文书
广告策划的实习心得体会总结!
2019/07/22 职场文书
利用python进行数据加载
2021/06/20 Python
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript