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中list循环语句用法实例
Nov 10 Python
Python判断文件和字符串编码类型的实例
Dec 21 Python
遗传算法python版
Mar 19 Python
python中实现数组和列表读取一列的方法
Apr 03 Python
python求最大值,不使用内置函数的实现方法
Jul 09 Python
如何使用Python破解ZIP或RAR压缩文件密码
Jan 09 Python
在django中使用apscheduler 执行计划任务的实现方法
Feb 11 Python
Python selenium页面加载慢超时的解决方案
Mar 18 Python
PyQt5+python3+pycharm开发环境配置教程
Mar 24 Python
Django DRF APIView源码运行流程详解
Aug 17 Python
Python 调用C++封装的进一步探索交流
Mar 04 Python
Python源码解析之List
May 21 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版)
2006/10/09 PHP
杏林同学录(七)
2006/10/09 PHP
php5.2时间相差8小时
2007/01/15 PHP
php设计模式 Chain Of Responsibility (职责链模式)
2011/06/26 PHP
一个典型的PHP分页实例代码分享
2011/07/28 PHP
Yii编程开发常见调用技巧集锦
2016/07/15 PHP
如何优雅的使用 laravel 的 validator验证方法
2018/11/11 PHP
按给定几率进行随机抽取的js代码
2010/12/28 Javascript
javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
2011/04/12 Javascript
Extjs中TabPane如何嵌套在其他网页中实现思路及代码
2013/01/27 Javascript
JS控制文本框textarea输入字数限制的方法
2013/06/17 Javascript
jQuery如何取id有.的值一般的方法是取不到的
2014/04/18 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
JavaScript_ECMA5数组新特性详解
2016/06/12 Javascript
再谈javascript常见错误及解决方法
2016/09/16 Javascript
JS动态添加选项案例分析
2016/10/17 Javascript
JS数组返回去重后数据的方法解析
2017/01/03 Javascript
使用Bootstrap4 + Vue2实现分页查询的示例代码
2017/12/21 Javascript
解决bootstrap-select 动态加载数据不显示的问题
2018/08/10 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
Python的Django框架下管理站点的基本方法
2015/07/17 Python
老生常谈Python基础之字符编码
2017/06/14 Python
numpy给array增加维度np.newaxis的实例
2018/11/01 Python
实例详解Python模块decimal
2019/06/26 Python
python之PyQt按钮右键菜单功能的实现代码
2019/08/17 Python
Python实现隐马尔可夫模型的前向后向算法的示例代码
2019/12/31 Python
tensorflow转换ckpt为savermodel模型的实现
2020/05/25 Python
Python创建简单的神经网络实例讲解
2021/01/04 Python
国际会议邀请函范文
2014/01/16 职场文书
会计电算化毕业生自荐信
2014/03/03 职场文书
邀请函格式范文
2015/02/02 职场文书
学校教师师德师风承诺书
2015/04/28 职场文书
地心历险记观后感
2015/06/15 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书
Windows Server 2008 修改远程登录端口以及配置防火墙
2022/04/28 Servers