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 操作文件的基本方法总结
Aug 10 Python
python正则表达式爬取猫眼电影top100
Feb 24 Python
Python中利用aiohttp制作异步爬虫及简单应用
Nov 29 Python
python实现抖音点赞功能
Apr 07 Python
python 求一个列表中所有元素的乘积实例
Jun 11 Python
Python爬虫爬取煎蛋网图片代码实例
Dec 16 Python
Python面向对象魔法方法和单例模块代码实例
Mar 25 Python
Python调用shell cmd方法代码示例解析
Jun 18 Python
python用Tkinter做自己的中文代码编辑器
Sep 07 Python
Scrapy爬虫文件批量运行的实现
Sep 30 Python
OpenCV-Python使用cv2实现傅里叶变换
Jun 09 Python
教你用python实现12306余票查询
Jun 30 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
ThinkPHP模板判断输出Defined标签用法详解
2014/06/30 PHP
smarty自定义函数htmlcheckboxes用法实例
2015/01/22 PHP
Laravel模板引擎Blade中section的一些标签的区别介绍
2015/02/10 PHP
PHP实现简单实用的验证码类
2015/07/29 PHP
php读取和保存base64编码的图片内容
2017/04/22 PHP
PHP工厂模式的日常使用
2019/03/20 PHP
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
原生JavaScript实现滚动条效果
2020/03/24 Javascript
js改变html的原有内容实现方法
2016/10/05 Javascript
浅析如何利用JavaScript进行语音识别
2016/10/27 Javascript
Bootstrap笔记—折叠实例代码
2017/03/13 Javascript
使用Vue.js和Element-UI做一个简单登录页面的实例
2018/02/23 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
JS中的算法与数据结构之二叉查找树(Binary Sort Tree)实例详解
2019/08/16 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
[52:08]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第一局
2016/03/05 DOTA
[01:50:49]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster BO3 第三场 1月24日
2021/03/11 DOTA
python标准算法实现数组全排列的方法
2015/03/17 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
详解Python中的type和object
2018/08/15 Python
Python/Django后端使用PIL Image生成头像缩略图
2019/04/30 Python
总结Python图形用户界面和游戏开发知识点
2019/05/22 Python
Flask中endpoint的理解(小结)
2019/12/11 Python
PyTorch中的Variable变量详解
2020/01/07 Python
学python最电脑配置有要求么
2020/07/05 Python
Python中的流程控制详解
2021/02/18 Python
Html5 APP中监听返回事件处理的方法示例
2018/03/15 HTML / CSS
学生自我鉴定范文
2013/10/04 职场文书
加强作风建设工作总结
2014/10/23 职场文书
保安2014年终工作总结
2014/12/06 职场文书
中学生自我评价范文
2015/03/03 职场文书
出纳试用期自我评价
2015/03/10 职场文书
2019旅游导游工作总结
2019/06/27 职场文书