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编程中的for循环语句学习教程
Oct 14 Python
分享Python文本生成二维码实例
Jan 06 Python
Python在不同目录下导入模块的实现方法
Oct 27 Python
Python爬虫抓取代理IP并检验可用性的实例
May 07 Python
matplotlib.pyplot画图 图片的二进制流的获取方法
May 24 Python
Python实现的简单读写csv文件操作示例
Jul 12 Python
Python 多线程不加锁分块读取文件的方法
Dec 11 Python
对python3 中方法各种参数和返回值详解
Dec 15 Python
python实现蒙特卡罗方法教程
Jan 28 Python
python dataframe NaN处理方式
Dec 26 Python
pandas和spark dataframe互相转换实例详解
Feb 18 Python
使用Django框架创建项目
Jun 10 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
Yii使用migrate命令执行sql语句的方法
2016/03/15 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
2016/11/14 PHP
基于ThinkPHP5框架使用QueryList爬取并存入mysql数据库操作示例
2019/05/25 PHP
php字符串截取函数mb_substr用法实例分析
2019/06/25 PHP
thinkPHP框架乐观锁和悲观锁实例分析
2019/10/30 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
jquery 事件对象属性小结
2010/04/27 Javascript
javascript 循环调用示例介绍
2013/11/20 Javascript
javascript中checkbox使用方法简单实例演示
2015/11/17 Javascript
js简单网速测试方法完整实例
2015/12/15 Javascript
基于JavaScript代码实现微信扫一扫下载APP
2015/12/30 Javascript
JS实现的在线调色板实例(附demo源码下载)
2016/03/01 Javascript
jQuery表单验证简单示例
2016/10/17 Javascript
JS实现发送短信验证后按钮倒计时功能(防止刷新倒计时失效)
2017/07/07 Javascript
webpack+vue2构建vue项目骨架的方法
2018/01/09 Javascript
vue如何在自定义组件中使用v-model
2018/05/14 Javascript
vuejs中监听窗口关闭和窗口刷新事件的方法
2018/09/21 Javascript
vue中eslintrc.js配置最详细介绍
2018/12/21 Javascript
js调用网络摄像头的方法
2020/12/05 Javascript
[59:00]OG vs TNC 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
遍历python字典几种方法总结(推荐)
2016/09/11 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
python list是否包含另一个list所有元素的实例
2018/05/04 Python
Python列表的切片实例讲解
2019/08/20 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
2020/01/19 Python
python collections模块的使用
2020/10/16 Python
Python 远程开关机的方法
2020/11/18 Python
简约控的天堂:The Undone
2016/12/21 全球购物
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
医务工作者先进事迹材料
2014/01/26 职场文书
抵押贷款承诺书
2014/05/30 职场文书
人力资源管理专业自荐信
2014/06/24 职场文书
委托收款证明
2015/06/23 职场文书
摘录式读书笔记
2015/07/01 职场文书
2016年暑期见闻作文
2015/11/25 职场文书