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中unittest模块做UT(单元测试)使用实例
Jun 12 Python
简单讲解Python中的闭包
Aug 11 Python
使用PyCharm配合部署Python的Django框架的配置纪实
Nov 19 Python
Python计时相关操作详解【time,datetime】
May 26 Python
老生常谈Python之装饰器、迭代器和生成器
Jul 26 Python
基于Python中求和函数sum的用法详解
Jun 28 Python
Python列表推导式与生成器用法分析
Aug 02 Python
Python中实例化class的执行顺序示例详解
Oct 14 Python
在自动化中用python实现键盘操作的方法详解
Jul 19 Python
TensorFlow基于MNIST数据集实现车牌识别(初步演示版)
Aug 05 Python
浅谈pytorch torch.backends.cudnn设置作用
Feb 20 Python
pytorch损失反向传播后梯度为none的问题
May 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的ob_start();控制您的浏览器cache!
2006/11/25 PHP
php安全之直接用$获取值而不$_GET 字符转义
2012/06/03 PHP
浅谈PHP调用Webservice思路及源码分享
2014/06/04 PHP
php实现cookie加密的方法
2015/03/10 PHP
PHP实现微信退款功能
2018/10/02 PHP
js同时按下两个方向键
2007/12/01 Javascript
Prototype Selector对象学习
2009/07/23 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
元素绑定click点击事件方法
2015/06/08 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
jQuery获取URL请求参数的方法
2015/07/18 Javascript
JavaScript如何禁止Backspace键
2015/12/02 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
基于JS实现移动端访问PC端页面时跳转到对应的移动端网页
2020/12/24 Javascript
浅谈jQuery中ajaxPrefilter的应用
2016/08/01 Javascript
js事件冒泡与事件捕获详解
2017/02/20 Javascript
AngularJs 延时器、计时器实例代码
2017/09/16 Javascript
node.js中axios使用心得总结
2017/11/29 Javascript
栈和队列数据结构的基本概念及其相关的Python实现
2015/08/24 Python
Python爬虫实现网页信息抓取功能示例【URL与正则模块】
2017/05/18 Python
使用实现XlsxWriter创建Excel文件并编辑
2018/05/04 Python
Python常见内置高效率函数用法示例
2018/07/31 Python
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
浅谈python新式类和旧式类区别
2019/04/26 Python
Python 下载及安装详细步骤
2019/11/04 Python
借助Paramiko通过Python实现linux远程登陆及sftp的操作
2020/03/16 Python
Python集成开发工具Pycharm的安装和使用详解
2020/03/18 Python
Python flask路由间传递变量实例详解
2020/06/03 Python
python em算法的实现
2020/10/03 Python
年度考核自我鉴定
2014/02/02 职场文书
厂办主管岗位职责范本
2014/02/28 职场文书
2014全国两会心得体会
2014/03/17 职场文书
招商引资工作汇报材料
2014/10/28 职场文书
2014年超市工作总结
2014/11/19 职场文书
主婚人致辞精选
2015/07/28 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android