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 相关文章推荐
Windows和Linux下使用Python访问SqlServer的方法介绍
Mar 10 Python
python发送HTTP请求的方法小结
Jul 08 Python
python实现图片处理和特征提取详解
Nov 13 Python
python爬虫之模拟登陆csdn的实例代码
May 18 Python
在Python中将函数作为另一个函数的参数传入并调用的方法
Jan 22 Python
Python中正则表达式的用法总结
Feb 22 Python
python与C、C++混编的四种方式(小结)
Jul 15 Python
Python爬虫学习之翻译小程序
Jul 30 Python
使用tensorflow DataSet实现高效加载变长文本输入
Jan 20 Python
python爬虫数据保存到mongoDB的实例方法
Jul 28 Python
Python计算矩阵的和积的实例详解
Sep 10 Python
Python实现邮件发送的详细设置方法(遇到问题)
Jan 18 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多文件上传功能实现原理及代码
2013/04/18 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
PHP的伪随机数与真随机数详解
2015/05/27 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
2020/02/07 PHP
PHP实现抽奖功能实例代码
2020/06/30 PHP
javascript预览上传图片发现的问题的解决方法
2010/11/25 Javascript
获取div编辑框,textarea,input text的光标位置 兼容IE,FF和Chrome的方法介绍
2012/11/08 Javascript
详解js跨域原理以及2种解决方案
2015/12/09 Javascript
js拖拽的原型声明和用法总结
2016/04/04 Javascript
浅谈js函数中的实例对象、类对象、局部变量(局部函数)
2016/11/20 Javascript
Angular的MVC和作用域
2016/12/26 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
vue+Element中table表格实现可编辑(select下拉框)
2020/05/21 Javascript
vue+element获取el-table某行的下标,根据下标操作数组对象方式
2020/08/07 Javascript
Python下的subprocess模块的入门指引
2015/04/16 Python
详解python单例模式与metaclass
2016/01/15 Python
python处理xml文件的方法小结
2017/05/02 Python
PyQt5实现下载进度条效果
2018/04/19 Python
对python中的argv和argc使用详解
2018/12/15 Python
python读写csv文件实例代码
2019/07/05 Python
Python简单处理坐标排序问题示例
2019/07/11 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
python中使用paramiko模块并实现远程连接服务器执行上传下载功能
2020/02/29 Python
python画环形图的方法
2020/03/25 Python
jupyter notebook 参数传递给shell命令行实例
2020/04/10 Python
python实现与redis交互操作详解
2020/04/21 Python
为什么说python适合写爬虫
2020/06/11 Python
美国女士时尚珠宝及配饰购物网站:Icing
2018/07/02 全球购物
Omio俄罗斯:一次搜索公共汽车、火车和飞机的机票
2018/11/17 全球购物
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
介绍一下Java的安全机制
2012/06/28 面试题
医师定期考核实施方案
2014/05/07 职场文书
领导莅临指导欢迎词
2015/09/30 职场文书
写给汽车4S店的创业计划书,拿来即用!
2019/08/09 职场文书
Vue中使用import进行路由懒加载的原理分析
2022/04/01 Vue.js