详解Django解决ajax跨域访问问题


Posted in Python onAugust 24, 2018

这篇文章主要给大家介绍了关于Django跨域请求问题解决的相关资料,文中介绍的实现方法包括:使用django-cors-headers全局控制、使用JsonP,只能用于Get方法以及在views.py里设置响应头,只能控制单个接口,需要的朋友可以参考下。
使用Django在服务器端写了一个API,返回一个JSON数据。使用Ajax调用该API:

但是,Chrome浏览器提示错误:

No 'Access-Control-Allow-Origin' header is present on the requested resource.

这是由于CORS导致的。

什么是CORS?

CORS(跨域资源共享,Cross-Origin Resource Sharing)是一种跨域访问的机制,可以让Ajax实现跨域访问。
其实,在服务器的response header中,加入“Access-Control-Allow-Origin: *”即可支持CORS,非常的简单,apache/nginx等怎么配置,见参考文档。
举个例子:

  1. API部署在DomainA上;
  2. Ajax文件部署在DomainB上,Ajax文件会向API发送请求,返回数据;
  3. 用户通过DomainC访问DomainB的Ajax文件,请求数据

详解Django解决ajax跨域访问问题

前端打开的是'http://localhost:63343‘地址, 另一个是django服务器,打开了‘http://localhost:8000‘地址, 所以在'http://localhost:63343‘的javascript对'http://localhost:8000‘进行访问时,端口不同,属于跨域访问.

当我将前端页面放入django中后,就不会出现跨域访问的拒绝了.

几种方法:

1.使用JSONP使用Ajax获取json数据时,存在跨域的限制。不过,在Web页面上调用js的script脚本文件时却不受跨域的影响,JSONP就是利用这个来实现跨域的传输。因此,我们需要将Ajax调用中的dataType从JSON改为JSONP(相应的API也需要支持JSONP)格式。
JSONP只能用于GET请求。

2.直接修改Django中的views.py文件修改views.py中对应API的实现函数,允许其他域通过Ajax请求数据:

def myview(_request): 
 response = HttpResponse(json.dumps({"key": "value", "key2": "value"}))
 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

3.安装django-cors-headers这里还有一各发现!在Django中,有人开发了CORS-header的middleware,只在settings.py中做一些简单的配置即可,开启CORS,没有跨域烦恼,真爽!~

django-cors-headers

首先安装

pip install django-cors-headers

然后在settings.py里配置一番就可以

INSTALLED_APPS = [ 
  ... 
  'corsheaders', 
  ... ] 
 MIDDLEWARE_CLASSES = ( 
  ... 
  'corsheaders.middleware.CorsMiddleware', 
  'django.middleware.common.CommonMiddleware', # 注意顺序 
  ... 
 ) 
#跨域增加忽略 
CORS_ALLOW_CREDENTIALS = True
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_WHITELIST = ( '*') 
CORS_ALLOW_METHODS = ( 'DELETE', 'GET', 'OPTIONS', 'PATCH', 'POST', 'PUT', 'VIEW', ) 
CORS_ALLOW_HEADERS = ( 
'XMLHttpRequest', 
'X_FILENAME', 
'accept-encoding', 
'authorization', 
'content-type', 
'dnt',
'origin', 
'user-agent', 
'x-csrftoken', 
'x-requested-with', 
'Pragma', 
)

大功告成了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中os和shutil模块实用方法集锦
May 13 Python
python仿抖音表白神器
Apr 08 Python
Python基础学习之时间转换函数用法详解
Jun 18 Python
Django使用unittest模块进行单元测试过程解析
Aug 02 Python
Python Collatz序列实现过程解析
Oct 12 Python
python yield关键词案例测试
Oct 15 Python
pytorch制作自己的LMDB数据操作示例
Dec 18 Python
tensorflow 实现从checkpoint中获取graph信息
Feb 10 Python
基于python 凸包问题的解决
Apr 16 Python
利用Python实现朋友圈中的九宫格图片效果
Sep 03 Python
python中altair可视化库实例用法
Jan 26 Python
Python必备技巧之函数的使用详解
Apr 04 Python
Python面向对象之反射/自省机制实例分析
Aug 24 #Python
Python使用装饰器模拟用户登陆验证功能示例
Aug 24 #Python
Python日志模块logging基本用法分析
Aug 23 #Python
Python多继承原理与用法示例
Aug 23 #Python
Python抽象和自定义类定义与用法示例
Aug 23 #Python
Python引用计数操作示例
Aug 23 #Python
python实现括号匹配的思路详解
Aug 23 #Python
You might like
php自动适应范围的分页代码
2008/08/05 PHP
判断是否为指定长度内字符串的php函数
2010/02/16 PHP
PHP开发中常用的十个代码样例
2016/02/02 PHP
PHP消息队列用法实例分析
2016/02/12 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
2016/05/17 PHP
JsEasy简介 JsEasy是什么?与下载
2007/03/07 Javascript
event.currentTarget与event.target的区别介绍
2012/12/31 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
常用的JavaScript WEB操作方法分享
2015/02/28 Javascript
javascript实现C语言经典程序题
2015/11/29 Javascript
如何利用AngularJS打造一款简单Web应用
2015/12/05 Javascript
Angular 4 依赖注入学习教程之FactoryProvider的使用(四)
2017/06/04 Javascript
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
Element Notification通知的实现示例
2020/07/27 Javascript
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
Python学习笔记之解析json的方法分析
2017/04/21 Python
对Python中plt的画图函数详解
2018/11/07 Python
用Python批量把文件复制到另一个文件夹的实现方法
2019/08/16 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
详解python itertools功能
2020/02/07 Python
python smtplib发送多个email联系人的实现
2020/10/09 Python
CSS3控制HTML元素动画效果
2014/02/08 HTML / CSS
可自定义箭头样式的CSS3气泡提示框
2016/03/16 HTML / CSS
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
Boston Proper官网:美国女装品牌
2017/10/30 全球购物
旧时光糖果:Old Time Candy
2018/02/05 全球购物
优衣库台湾官网:UNIQLO台湾
2019/02/01 全球购物
数组越界问题
2015/10/21 面试题
春节活动策划方案
2014/01/24 职场文书
喷漆工的岗位职责
2014/03/17 职场文书
《火烧云》教学反思
2014/04/12 职场文书
办公室领导干部作风整顿个人整改措施
2014/09/17 职场文书
入党个人总结范文
2015/03/02 职场文书
2019年中学生的思想品德评语集锦
2019/12/19 职场文书
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫