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 切片和range()用法说明
Mar 24 Python
python实现的一个p2p文件传输实例
Jun 04 Python
python实现堆栈与队列的方法
Jan 15 Python
Python实现公历(阳历)转农历(阴历)的方法示例
Aug 22 Python
用Python实现随机森林算法的示例
Aug 24 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
May 21 Python
将tensorflow的ckpt模型存储为npy的实例
Jul 09 Python
python安装读取grib库总结(推荐)
Jun 24 Python
Visual Studio code 配置Python开发环境
Sep 11 Python
Python descriptor(描述符)的实现
Nov 15 Python
python3 re返回形式总结
Nov 20 Python
filter使用python3代码进行迭代元素的实例详解
Dec 03 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
一键删除顽固的空文件夹 软件下载
2007/01/26 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
win7安装php框架Yii的方法
2016/01/25 PHP
php判断str字符串是否是xml格式数据的方法示例
2017/07/26 PHP
PHP设计模式之委托模式定义与用法简单示例
2018/08/13 PHP
PHP的new static和new self的区别与使用
2019/11/27 PHP
KindEditor在php环境下上传图片功能集成的方法示例
2020/07/20 PHP
Jquery作者John Resig自己封装的javascript 常用函数
2009/11/09 Javascript
Android中的jQuery:AQuery简介
2014/05/06 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
基于javascript实现彩票随机数生成(简单版)
2020/04/17 Javascript
js实现不重复导入的方法
2016/03/02 Javascript
Javascript操作表单实例讲解(下)
2016/06/20 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
jQuery实现可拖拽3D万花筒旋转特效
2017/01/03 Javascript
原生js实现可拖拽效果
2017/02/28 Javascript
Angular.JS内置服务$http对数据库的增删改使用教程
2017/05/07 Javascript
Angular在模板驱动表单中自定义校验器的方法
2017/08/09 Javascript
JavaScript中防止微信浏览器被整体拖动的方法
2017/08/25 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
three.js中文文档学习之如何本地运行详解
2017/11/20 Javascript
js生成word中图片处理方法
2018/01/06 Javascript
浅谈Vue Element中Select下拉框选取值的问题
2018/03/01 Javascript
Vue.js组件实现选项卡以及切换特效
2019/07/24 Javascript
Python基于生成器迭代实现的八皇后问题示例
2018/05/23 Python
使用memory_profiler监测python代码运行时内存消耗方法
2018/12/03 Python
Python+appium框架原生代码实现App自动化测试详解
2020/03/06 Python
解决python cv2.imread 读取中文路径的图片返回为None的问题
2020/06/02 Python
Python中pass的作用与使用教程
2020/11/13 Python
python脚本定时发送邮件
2020/12/22 Python
澳大利亚100%丝绸多彩度假装商店:TheSwankStore
2019/09/04 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
简单而又朴实的个人求职信分享
2013/12/12 职场文书
咖啡馆创业计划书
2014/01/26 职场文书
订货会主持词
2015/07/01 职场文书
pandas中DataFrame检测重复值的实现
2021/05/26 Python