专栏首页马国俊的专栏django 之跨域访问问题解决 access-control-allow-origin
原创

django 之跨域访问问题解决 access-control-allow-origin

1产生跨域问题的原因

跨域问题是浏览器同源策略限制,当前域名的js只能读取同域下的窗口属性。

2跨域问题产生的场景

当要在在页面中使用js获取其他网站的数据时,就会产生跨域问题,比如在网站中使用ajax请求其他网站的天气、快递或者其他数据接口时以及hybrid app中请求数据,浏览器就会提示以下错误。这种场景下就要解决js的跨域问题。

XMLHttpRequest cannot load http://你请求的域名. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://当前页的域名' is therefore not allowed access. 哪些情况会产生跨域问题 一个网站的网址组成包括协议名,子域名,主域名,端口号。比如 https://github.com/,其中https是协议名,www是子域名,github是主域名,端口号是80,当在在页面中从一个url请求数据时,如果这个url的协议名、子域名、主域名、端口号任意一个有一个不同,就会产生跨域问题。 即使是在 http://localhost:80/ 页面请求 http://127.0.0.1:80/ 也会有跨域问题

3解决跨域问题

有很多种方法,大体上分前台解决方案和后台解决方案。 前台可以设置ajax的type为jsonp(注意,jsonp != json) 现在介绍Django后台的解决方案,特别简单。其他的,也有自己的解决方案,网上一搜一箩筐,不过,由于没有时间去尝试,需要你自己甄别了。下面仅仅介绍Django的解决方案。

3-1 安装

pip install django-cors-header

如果报上面的问题,说明站点不可用

再上述命令后,加上 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com 即可。

这是我选取的一个可用的站点。

3-2设置settiing.py

增加APPS

INSTALLED_APPS = (
...
'corsheaders'
)

设置中间键

MIDDLEWARE_CLASSES = (
'django.contrib.sessions.middleware.SessionMiddleware',
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.security.SecurityMiddleware',
)

增加前三个。注意,corsheaders.middleware.CorsMiddleware一定要在django.middleware.common.CommonMiddleware之前。

不用重启,就实时生效了。Django支持热加载。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 20 Python 基础: 重点知识点--网络通信进阶知识讲解

    其他文章均已发表,可通过 “技术专栏 -- Python -- PY基础” 进行阅读。

    小Gy
  • Java Web之Struts2访问Servlet API

    方法一:直接获取 Map类型 Map request = (Map)Actioncontext.getContext().get("request"); Map...

    YungFan
  • 【Golang语言社区】前端编程- 从零开始开发一款H5小游戏(一) 重温canvas的基础用法

    初衷 从萌发写一个小游戏的想法到完成游戏开发用了大概一周的业余时间。这个过程积累了一些经验,也算是参透了一些游戏开发的原理。在这里打算写一个系列教程,讲述怎样从...

    李海彬
  • 《Learning ELK Stack》前言

    yeedomliu
  • 企业安全体系架构分析:开发架构之开源WAF延申

    在前几期过多的介绍体系化方面的事情,让大家有个基本的概念,能将一些安全设备、安全理念相关联起来,这一期准备给干货——开源WAF的搭建。

    FB客服
  • 一篇文章讲透线上应用监控

    “线上服务停了,要重启一下”?久经职场做研发的程序员,视线会逐渐转移到线上应用的运行状态。设想一下,如果你在半夜两点正在酣眠美梦时,微信群里突然炸开锅:“服务停...

    一猿小讲
  • 学会Mysql第二天

    完整的SQL查询指令: select select选项 字段列表 from 数据源 where条件 group by 分组 having 条件 order by...

    白胡杨同学
  • [译]推特和脸书能否预测股票变动?

    大数据文摘
  • Django学习-第十一讲(下):视图高级(一)网页请求限制、HttpRequest、HttpResponse、JsonResponse对象

    Django内置的视图装饰器可以给视图提供一些限制。比如这个视图只能通过GET的method访问等。以下将介绍一些常用的内置视图装饰器

    小海怪的互联网
  • 一日一技:使用 Linux 自带的 logrotate 管理你的所有日志

    我们在开发的过程中,会创建非常多的日志,对日志进行 rotate 是一个基本要求。

    青南

扫码关注云+社区

领取腾讯云代金券