Django使用中间件解决前后端同源策略问题


Posted in Python onSeptember 02, 2019

问题描述

前端时间在公司的时候,要使用angular开发一个网站,因为angular很适合前后端分离,所以就做了一个简单的图书管理系统来模拟前后端分离。

但是在开发过程中遇见了同源策略的跨域问题,页面能够显示,但是却没有数据,显示如下

Django使用中间件解决前后端同源策略问题

右键检查报错如下:

Django使用中间件解决前后端同源策略问题

报错代码如下

Failed to load http://127.0.0.1:8888/publisher/: 
No 'Access-Control-Allow-Origin' header is present on the requested resource. 
Origin 'http://localhost:4200' is therefore not allowed access.

angular从后端获取数据的代码如下:

private publishersUrl = 'http://127.0.0.1:8888/publisher/';
private addpubUrl = 'http://127.0.0.1:8888/addpub/';
getPublishers (): Observable<Publisher[]> {
  return this.http.get<Publisher[]>(this.publishersUrl)
  .pipe(
   catchError(this.handleError<Publisher[]>('getPublishers', []))
  ); 
}

问题原因

出现这个问题的原因是同源策略的跨域问题,关于这个问题不在此处详细讨论,如有兴趣可以去搜索一下。

问题解决

解决这个问题关键在于后端,要允许其他网站进行访问,在这里我们可以定义一个中间件来解决这个问题,步骤如下。

1.在app下新建一个myMiddleware.py文件。

2.在文件中加入以下代码

from django.utils.deprecation import MiddlewareMixin
class MyCore(MiddlewareMixin):
  def process_response(self, request, response):
    response['Access-Control-Allow-Origin'] = "*"
    if request.method == "OPTIONS":
      # 复杂请求 预检
      response['Access-Control-Allow-Headers'] = "Content-Type"
      response['Access-Control-Allow-Methods'] = "POST, DELETE, PUT"
    return response

3.去settings文件中注册中间件

MIDDLEWARE = [
  'BMS.myMiddleware.MyCore',
]

至此,这个问题就算解决了,我们可以将项目运行起来看一下结果

Django使用中间件解决前后端同源策略问题

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

Python 相关文章推荐
python33 urllib2使用方法细节讲解
Dec 03 Python
Python模拟脉冲星伪信号频率实例代码
Jan 03 Python
使用Python如何测试InnoDB与MyISAM的读写性能
Sep 18 Python
Python中几种属性访问的区别与用法详解
Oct 10 Python
python爬虫简单的添加代理进行访问的实现代码
Apr 04 Python
Django Python 获取请求头信息Content-Range的方法
Aug 06 Python
Python3.6+selenium2.53.6自动化测试_读取excel文件的方法
Sep 06 Python
Python实现二叉树的最小深度的两种方法
Sep 30 Python
Django实现简单网页弹出警告代码
Nov 15 Python
opencv之为图像添加边界的方法示例
Dec 26 Python
Python版中国省市经纬度
Feb 11 Python
Python lambda表达式原理及用法解析
Aug 18 Python
python elasticsearch环境搭建详解
Sep 02 #Python
关于pymysql模块的使用以及代码详解
Sep 01 #Python
使用Python将字符串转换为格式化的日期时间字符串
Sep 01 #Python
Python 使用多属性来进行排序
Sep 01 #Python
详解一种用django_cache实现分布式锁的方式
Sep 01 #Python
python实现多进程通信实例分析
Sep 01 #Python
python输出带颜色字体实例方法
Sep 01 #Python
You might like
php实现的遍历文件夹下所有文件,编辑删除
2010/01/05 PHP
基于PHP array数组的教程详解
2013/06/05 PHP
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
javascript:以前写的xmlhttp池,代码
2008/05/18 Javascript
js 字符串操作函数
2009/07/25 Javascript
基于Jquery的跨域传输数据(JSONP)
2011/03/10 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
通过jQuery源码学习javascript(一)
2012/12/27 Javascript
js动态控制table的tr、td增加及删除的具体实现
2014/04/30 Javascript
用jquery的方法制作一个简单的导航栏
2014/06/23 Javascript
jQuery焦点图切换简易插件制作过程全纪录
2014/08/27 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
jQuery动态添加可拖动元素完整实例(附demo源码下载)
2016/06/21 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
layui自定义验证,用ajax查询后台是否有重复数据,form.verify的例子
2019/09/06 Javascript
微信小程序实现二维码签到考勤系统
2020/01/16 Javascript
基于Element封装一个表格组件tableList的使用方法
2020/06/29 Javascript
vant自定义二级菜单操作
2020/11/02 Javascript
python写日志封装类实例
2015/06/28 Python
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
Python3实现发送QQ邮件功能(附件)
2020/12/23 Python
Python解析命令行读取参数--argparse模块使用方法
2018/01/23 Python
Python处理文本换行符实例代码
2018/02/03 Python
Python字典的核心底层原理讲解
2019/01/24 Python
python实现LBP方法提取图像纹理特征实现分类的步骤
2019/07/11 Python
使用Python刷淘宝喵币(低阶入门版)
2019/10/30 Python
实现Python与STM32通信方式
2019/12/18 Python
Selenium webdriver添加cookie实现过程详解
2020/08/12 Python
乌克兰网上珠宝商店:GoldSoveren
2020/03/31 全球购物
社区庆中秋节活动方案
2014/02/07 职场文书
股指期货心得体会
2014/09/10 职场文书
公司表扬稿范文
2015/05/05 职场文书
职场干货:简历中的自我评价应该这样写!
2019/05/06 职场文书