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中的socket模块使用代理实例
May 29 Python
Python异常学习笔记
Feb 03 Python
Flask框架的学习指南之制作简单blog系统
Nov 20 Python
Python实现多并发访问网站功能示例
Jun 19 Python
Python内置函数reversed()用法分析
Mar 20 Python
python实现Windows电脑定时关机
Jun 20 Python
Python实现string字符串连接的方法总结【8种方式】
Jul 06 Python
浅析python3中的os.path.dirname(__file__)的使用
Aug 30 Python
Python发展简史 Python来历
May 14 Python
pandas 数据索引与选取的实现方法
Jun 21 Python
Python读取实时数据流示例
Dec 02 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
Sep 23 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下把数组保存为文件格式的实例应用
2010/02/08 PHP
.htaccess文件保护实例讲解
2011/02/06 PHP
php计算整个目录大小的方法
2015/06/19 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
PHP获取对象属性的三种方法实例分析
2019/01/03 PHP
使用composer命令加载vendor中的第三方类库 的方法
2019/07/09 PHP
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
在Ubuntu系统上安装Node.JS的教程
2015/10/15 Javascript
javascript实现拖动元素交换位置
2015/11/29 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
jQuery实现可拖拽的许愿墙效果【附demo源码下载】
2016/09/14 Javascript
jQuery实现checkbox的简单操作
2017/11/18 jQuery
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
Vue中关闭弹窗组件时销毁并隐藏操作
2020/09/01 Javascript
Python计算程序运行时间的方法
2014/12/13 Python
Python使用Mechanize模块编写爬虫的要点解析
2016/03/31 Python
python-opencv在有噪音的情况下提取图像的轮廓实例
2017/08/30 Python
详解Python 装饰器执行顺序迷思
2018/08/08 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
Python如何基于selenium实现自动登录博客园
2019/12/16 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
python的pip有什么用
2020/06/17 Python
20行代码教你用python给证件照换底色的方法示例
2021/02/05 Python
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
欧洲最大的拼图游戏商店:JigsawPuzzle.co.uk
2018/07/04 全球购物
征婚广告词
2014/03/17 职场文书
家长会欢迎标语
2014/06/24 职场文书
联村联户简报
2015/07/21 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书
《打电话》教学反思
2016/02/22 职场文书
vue使用v-model进行跨组件绑定的基本实现方法
2021/04/28 Vue.js
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL
python高温预警数据获取实例
2022/07/23 Python