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 相关文章推荐
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 Python
基于python 处理中文路径的终极解决方法
Apr 12 Python
Diango + uwsgi + nginx项目部署的全过程(可外网访问)
Apr 22 Python
python统计多维数组的行数和列数实例
Jun 23 Python
详解Python中的测试工具
Jun 09 Python
Python适配器模式代码实现解析
Aug 02 Python
pytorch多GPU并行运算的实现
Sep 27 Python
在python tkinter界面中添加按钮的实例
Mar 04 Python
django model通过字典更新数据实例
Apr 01 Python
解决pycharm中的run和debug失效无法点击运行
Jun 09 Python
vscode调试django项目的方法
Aug 06 Python
python自动打开浏览器下载zip并提取内容写入excel
Jan 04 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
初探PHP5
2006/10/09 PHP
php中判断字符串是否全是中文或含有中文的实现代码
2011/09/16 PHP
Thinkphp中的curd应用实用要点
2015/01/04 PHP
php正则表达式获取内容所有链接
2015/07/24 PHP
PHP之图片上传类实例代码(加了缩略图)
2016/06/30 PHP
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
2013/04/02 Javascript
浅析return false的正确使用
2013/11/04 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
JavaScript的==运算详解
2016/07/20 Javascript
AngularJS ng-template寄宿方式用法分析
2016/11/07 Javascript
js转换对象为xml
2017/02/17 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
解决使用Vue.js显示数据的时,页面闪现原始代码的问题
2018/02/11 Javascript
Python下Fabric的简单部署方法
2015/07/14 Python
使用Python生成XML的方法实例
2017/03/21 Python
浅谈python爬虫使用Selenium模拟浏览器行为
2018/02/23 Python
Python统计单词出现的次数
2018/04/04 Python
python3实现随机数
2018/06/25 Python
python实现银行管理系统
2019/10/25 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
Python 防止死锁的方法
2020/07/29 Python
pandas 数据类型转换的实现
2020/12/29 Python
python爬虫基础之urllib的使用
2020/12/31 Python
使用CSS Grid布局实现网格的流动
2014/12/30 HTML / CSS
localStorage的过期时间设置的方法详解
2018/11/26 HTML / CSS
C&A巴西网上商店:时尚、衣服、手机和鞋子
2020/06/07 全球购物
C#面试常见问题
2013/02/25 面试题
介绍一下结构化程序设计方法和面向对象程序设计方法的区别
2012/06/27 面试题
工程造价与管理专业应届生求职信
2013/11/23 职场文书
机电专业求职信
2014/06/14 职场文书
生产助理岗位职责
2014/06/18 职场文书
护理专科学生自荐书
2014/07/05 职场文书
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python