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 相关文章推荐
使用Python的Supervisor进行进程监控以及自动启动
May 29 Python
Python XML RPC服务器端和客户端实例
Nov 22 Python
Python删除空文件和空文件夹的方法
Jul 14 Python
微信跳一跳游戏python脚本
Apr 01 Python
Python实现判断字符串中包含某个字符的判断函数示例
Jan 08 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
Python创建普通菜单示例【基于win32ui模块】
May 09 Python
Python Pandas 获取列匹配特定值的行的索引问题
Jul 01 Python
python3.7 openpyxl 删除指定一列或者一行的代码
Oct 08 Python
python 多进程并行编程 ProcessPoolExecutor的实现
Oct 11 Python
tensorflow通过模型文件,使用tensorboard查看其模型图Graph方式
Jan 23 Python
Pycharm生成可执行文件.exe的实现方法
Jun 02 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将向Java靠拢
2006/10/09 PHP
php中array_slice和array_splice函数解析
2016/10/18 PHP
php获取文章内容第一张图片的方法示例
2017/07/03 PHP
犀利的js 函数集合
2009/06/11 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
Javascript对象字面量的理解
2016/06/22 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
ES6 javascript中Class类继承用法实例详解
2017/10/30 Javascript
mui back 返回刷新页面的实例
2017/12/06 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
详解Nodejs mongoose
2018/06/10 NodeJs
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
vue页面跳转实现页面缓存操作
2020/07/22 Javascript
electron踩坑之remote of undefined的解决
2020/10/06 Javascript
Python装饰器使用实例:验证参数合法性
2015/06/24 Python
python 实现对文件夹内的文件排序编号
2018/04/12 Python
Python中.join()和os.path.join()两个函数的用法详解
2018/06/11 Python
浅谈django orm 优化
2018/08/18 Python
python实现两个一维列表合并成一个二维列表
2019/12/02 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
pytorch中的inference使用实例
2020/02/20 Python
pytorch使用horovod多gpu训练的实现
2020/09/09 Python
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
写好自荐信的技巧
2013/11/08 职场文书
医学生临床实习自我评价
2014/03/07 职场文书
大学生全国两会报告感想
2014/03/17 职场文书
小学数学课后反思
2014/04/23 职场文书
大学生违纪检讨书300字
2014/10/25 职场文书
给老婆的检讨书
2015/01/27 职场文书
小学中队活动总结
2015/05/11 职场文书
致运动员赞词
2015/07/22 职场文书
客户答谢会致辞
2015/07/30 职场文书
学生会干部任命书
2015/09/21 职场文书
2016中秋节广告语
2016/01/28 职场文书
python基于tkinter制作无损音乐下载工具
2021/03/29 Python