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实现哈希表
Feb 07 Python
Python实现爬取逐浪小说的方法
Jul 07 Python
Python中基础的socket编程实战攻略
Jun 01 Python
python3.4下django集成使用xadmin后台的方法
Aug 15 Python
python3利用smtplib通过qq邮箱发送邮件方法示例
Dec 03 Python
Python xlwt设置excel单元格字体及格式
Apr 18 Python
Python多进程池 multiprocessing Pool用法示例
Sep 07 Python
Python实现报警信息实时发送至邮箱功能(实例代码)
Nov 11 Python
如何通过python实现全排列
Feb 11 Python
python打印文件的前几行或最后几行教程
Feb 13 Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 Python
对PyTorch中inplace字段的全面理解
May 22 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/12/07 PHP
基于php split()函数的用法详解
2013/06/05 PHP
php生成EAN_13标准条形码实例
2013/11/13 PHP
php算法实例分享
2015/07/14 PHP
PHP中each与list用法分析
2016/01/08 PHP
Laravel解决nesting level错误和隐藏index.php的问题
2019/10/12 PHP
jQuery调用WebService的实现代码
2011/06/19 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
JS弹出窗口插件zDialog简单用法示例
2016/06/12 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
AngularJS变量及过滤器Filter用法分析
2016/11/22 Javascript
利用vue-router实现二级菜单内容转换
2016/11/30 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
使用requirejs模块化开发多页面一个入口js的使用方式
2017/06/14 Javascript
JavaScript阻止表单提交方法(附代码)
2017/08/15 Javascript
jQuery实现base64前台加密解密功能详解
2017/08/29 jQuery
微信小程序中使用自定义图标(阿里icon)的方法
2018/08/20 Javascript
vue组件实践之可搜索下拉框功能
2018/11/25 Javascript
解决vue-router 切换tab标签关闭时缓存问题
2020/07/22 Javascript
Python创建日历实例
2014/08/21 Python
python实现在目录中查找指定文件的方法
2014/11/11 Python
Python实现Smtplib发送带有各种附件的邮件实例
2017/06/05 Python
Python实现接受任意个数参数的函数方法
2018/04/21 Python
利用python的socket发送http(s)请求方法示例
2018/05/07 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
Ubuntu下Python+Flask分分钟搭建自己的服务器教程
2019/11/19 Python
python实现图片上添加图片
2019/11/26 Python
python文件和文件夹复制函数
2020/02/07 Python
Django实现whoosh搜索引擎使用jieba分词
2020/04/08 Python
django 外键创建注意事项说明
2020/05/20 Python
俄罗斯运动、健康和美容产品在线商店:Lactomin.ru
2020/07/23 全球购物
给学校的建议书
2014/03/12 职场文书
党员对照检查剖析材料
2014/10/13 职场文书
2019个人半年工作总结
2019/06/21 职场文书
JavaScript中时间格式化新思路toLocaleString()
2021/11/07 Javascript