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 相关文章推荐
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
Nov 27 Python
python函数参数*args**kwargs用法实例
Dec 04 Python
谈谈Python进行验证码识别的一些想法
Jan 25 Python
python+selenium实现登录账户后自动点击的示例
Dec 22 Python
python实现简易云音乐播放器
Jan 04 Python
Python如何抓取天猫商品详细信息及交易记录
Feb 23 Python
一篇文章读懂Python赋值与拷贝
Apr 19 Python
Python实现对特定列表进行从小到大排序操作示例
Feb 11 Python
django框架auth模块用法实例详解
Dec 10 Python
pytorch实现mnist分类的示例讲解
Jan 10 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
May 10 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 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中计算程序运行时间的类代码
2012/11/03 PHP
destoon官方标签大全
2014/06/20 PHP
php读取mssql的ntext字段返回值为空的解决方法
2014/12/30 PHP
PHP简单选择排序算法实例
2015/01/26 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
PHP中error_reporting函数用法详细介绍
2017/06/11 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
浅谈PHP匿名函数和闭包
2019/03/08 PHP
javascript String 对象
2008/04/25 Javascript
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
js实现拖拽效果
2015/02/12 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
浅谈Javascript中substr和substring的区别
2015/09/30 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
javascript iframe跨域详解
2016/10/26 Javascript
jQuery实现IE输入框完成placeholder标签功能的方法
2017/09/20 jQuery
javaScript中&quot;==&quot;和&quot;===&quot;的区别详解
2018/03/16 Javascript
灵活使用console让js调试更简单的方法步骤
2019/04/23 Javascript
详解element-ui动态限定的日期范围选择器代码片段
2020/07/03 Javascript
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
[01:08]DOTA2“血战之命”预告片
2017/08/12 DOTA
Python程序设计入门(2)变量类型简介
2014/06/16 Python
让 python 命令行也可以自动补全
2014/11/30 Python
Python使用剪切板的方法
2017/06/06 Python
Python编程实现及时获取新邮件的方法示例
2017/08/10 Python
Python 利用内置set函数对字符串和列表进行去重的方法
2018/06/29 Python
使用python进行波形及频谱绘制的方法
2019/06/17 Python
python自定义函数实现最大值的输出方法
2019/07/09 Python
keras多显卡训练方式
2020/06/10 Python
如何一键升级Python所有包
2020/11/05 Python
HTML5 placeholder属性详解
2016/06/22 HTML / CSS
免费获得微软MCSD证书赶快行动吧!
2012/11/13 HTML / CSS
牦牛毛户外探险服装:Kora
2019/02/08 全球购物
法学自荐信
2014/06/20 职场文书