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 正则式 概述及常用字符
May 07 Python
Linux下使用python调用top命令获得CPU利用率
Mar 10 Python
python遍历序列enumerate函数浅析
Oct 17 Python
Python算法之图的遍历
Nov 16 Python
Python实现螺旋矩阵的填充算法示例
Dec 28 Python
Python将多个excel表格合并为一个表格
Feb 22 Python
Python实现可设置持续运行时间、线程数及时间间隔的多线程异步post请求功能
Jan 11 Python
python:pandas合并csv文件的方法(图书数据集成)
Apr 12 Python
python处理数据,存进hive表的方法
Jul 04 Python
python中shell执行知识点
May 06 Python
Anaconda+vscode+pytorch环境搭建过程详解
May 25 Python
浅谈Selenium 控制浏览器的常用方法
Dec 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
php使用fopen创建utf8编码文件的方法
2014/10/31 PHP
ThinkPHP函数详解之M方法和R方法
2015/09/10 PHP
php实现scws中文分词搜索的方法
2015/12/25 PHP
老生常谈ThinkPHP中的行为扩展和插件(推荐)
2017/05/05 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
jQuery开发者都需要知道的5个小技巧
2010/01/08 Javascript
javascript 保存文件到本地实现方法
2012/11/29 Javascript
使用JavaScript获取电池状态的方法
2014/05/03 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
JavaScript中的函数模式详解
2015/02/11 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
Bootstrap实现响应式导航栏效果
2015/12/28 Javascript
基于jQuery实现select下拉选择可输入附源码下载
2016/02/03 Javascript
JavaScript驾驭网页-CSS与DOM
2016/03/24 Javascript
全面解析vue中的数据双向绑定
2017/05/10 Javascript
JavaScript运行原理分析
2018/02/09 Javascript
vue+vue-router转场动画的实例代码
2018/09/01 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
angular 未登录状态拦截路由跳转的方法
2018/10/09 Javascript
抖音上用记事本编写爱心小程序教程
2019/04/17 Javascript
基于Nuxt.js项目的服务端性能优化与错误检测(容错处理)
2019/10/23 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
vue中可编辑树状表格的实现代码
2020/10/31 Javascript
wxpython 最小化到托盘与欢迎图片的实现方法
2014/06/09 Python
Python读取指定日期邮件的实例
2019/02/01 Python
Python Lambda函数使用总结详解
2019/12/11 Python
基于CSS3的CSS 多栏(Multi-column)实现瀑布流源码分享
2014/06/11 HTML / CSS
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
生物制药专业自我鉴定
2014/02/19 职场文书
大学生求职信范文
2014/05/24 职场文书
安全横幅标语
2014/06/09 职场文书
办公室主任岗位职责范本
2015/03/31 职场文书
你对自己的信用报告有过了解吗?
2019/07/09 职场文书
导游词之江西赣州
2019/10/15 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android