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 PIL模块与随机生成中文验证码
Feb 27 Python
浅述python中argsort()函数的实例用法
Mar 30 Python
在python下读取并展示raw格式的图片实例
Jan 24 Python
Python 使用指定的网卡发送HTTP请求的实例
Aug 21 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
Oct 09 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
Apr 27 Python
Django微信小程序后台开发教程的实现
Jun 03 Python
Python进行统计建模
Aug 10 Python
python matplotlib库的基本使用
Sep 23 Python
用python写PDF转换器的实现
Oct 29 Python
Python实现Kerberos用户的增删改查操作
Dec 14 Python
Python可视化学习之seaborn绘制矩阵图详解
Feb 24 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防注
2007/01/15 PHP
php中常用字符串处理代码片段整理
2011/11/07 PHP
Ubuntu中搭建Nginx、PHP环境最简单的方法
2015/03/05 PHP
PHP单例模式详细介绍
2015/07/01 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
浅析XMLHttpRequest的缓存问题
2013/12/13 Javascript
利用JavaScript阻止表单提交的两种方法
2016/08/11 Javascript
AngularJS中比较两个数组是否相同
2016/08/24 Javascript
JS触摸与手势事件详解
2017/05/09 Javascript
vue中component组件的props使用详解
2017/09/04 Javascript
JS中精巧的自动柯里化实现方法
2017/12/12 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
js实现一个简易计算器
2020/03/30 Javascript
微信小程序选择图片控件
2021/01/19 Javascript
Python获取远程文件大小的函数代码分享
2014/05/13 Python
在Python中使用next()方法操作文件的教程
2015/05/24 Python
python 二分查找和快速排序实例详解
2017/10/13 Python
python先序遍历二叉树问题
2017/11/10 Python
python 删除指定时间间隔之前的文件实例
2018/04/24 Python
TensorFlow实现卷积神经网络
2018/05/24 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
使用python批量化音乐文件格式转换的实例
2019/01/09 Python
Django admin管理工具TabularInline类用法详解
2020/05/14 Python
Python+unittest+requests+excel实现接口自动化测试框架
2020/12/23 Python
关键字final的用法
2013/10/02 面试题
2014年物流工作总结
2014/11/25 职场文书
2014年体育教学工作总结
2014/12/09 职场文书
骨干教师事迹材料
2014/12/17 职场文书
二手车转让协议书
2015/01/29 职场文书
运动会通讯稿300字
2015/07/20 职场文书
初一英语教学反思
2016/02/15 职场文书
2016年优秀少先队员事迹材料
2016/02/26 职场文书
看看如何用Python绘制小米新版天价logo
2021/04/20 Python
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python
Mysql中有关Datetime和Timestamp的使用总结
2021/12/06 MySQL