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 删除。

编辑于

马国俊的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IMWeb前端团队

Nodejs进阶:核心模块https 之 如何优雅的访问12306

本文作者:IMWeb 陈映平 原文出处:IMWeb社区 未经同意,禁止转载 模块概览 这个模块的重要性,基本不用强调了。在网络安全问题日益严峻的今天,...

23410
来自专栏魏艾斯博客www.vpsss.net

军哥 LNMP 1.5 测试版发布

1623
来自专栏魏艾斯博客www.vpsss.net

Let’s Encrypt 官方推荐 Certbot 工具快速部署 SSL 证书

1484
来自专栏开源项目

不要再问怎么把项目从 GitHub 搬到码云了!

壹 项目名要求: 只允许字母、数字或者下划线(_)、中划线(-)、英文句号(.),必须以字母开头。 不符合项目名要求会导致无法导入。 贰 如何将 GitHu...

8096
来自专栏CSDN技术头条

快速实战 Spring Boot

解释一下:Spring Boot 可以构建一切。Spring Boot 设计之初就是为了最少的配置,最快的速度来启动和运行 Spring 项目。Spring B...

1035
来自专栏JMCui

Linux 日常使用小记.

一、Oracle VirtualBox安装Linux7.0全屏设置 1. 点击菜单栏 设备 –> 分配光驱 –> 选择一个虚拟光盘,找到VirtualBox安装...

3946
来自专栏python爬虫日记

基于scrapyd爬虫发布总结

python以丰富的三方类库取得了众多程序员的认可,但也因此带来了众多的类库版本问题,本文总结的内容是基于最新的类库版本。

722
来自专栏IT综合技术分享

docker安装篇,第二篇 在Ubuntu18.04上开启RESTful API接口,HTTP与HTTPS接口访问

https://docs.docker.com/install/linux/linux-postinstall/#next-steps

1663
来自专栏Angular&服务

检测js错误

-在 app.module.ts 中配置 FundebugErrorHandler

633
来自专栏Python

三、请求库之requests模块

 一 介绍 #介绍:使用requests可以模拟浏览器的请求,比起之前用到的urllib,requests模块的api更加便捷(本质就是封装了urllib3) ...

1997

扫码关注云+社区