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列表操作实例
Jan 14 Python
使用Python压缩和解压缩zip文件的教程
May 06 Python
python安装cx_Oracle模块常见问题与解决方法
Feb 21 Python
python 打印直角三角形,等边三角形,菱形,正方形的代码
Nov 21 Python
详解用TensorFlow实现逻辑回归算法
May 02 Python
对pandas处理json数据的方法详解
Feb 08 Python
python实现扫描ip地址的小程序
Apr 16 Python
Django分页功能的实现代码详解
Jul 29 Python
pytorch 可视化feature map的示例代码
Aug 20 Python
python2和python3实现在图片上加汉字的方法
Aug 22 Python
Python模块/包/库安装的六种方法及区别
Feb 24 Python
浅谈Python 函数式编程
Jun 20 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
PL-880隐藏功能
2021/03/01 无线电
自制短波长线天线频率预选器 - 成功消除B2K之流的镜像
2021/03/02 无线电
Laravel框架中实现使用阿里云ACE缓存服务
2015/02/10 PHP
PHP 返回13位时间戳的实现代码
2016/05/13 PHP
自动更新作用
2006/10/08 Javascript
javaScript如何生成xmlhttp
2013/12/16 Javascript
js获取select选中的option的text示例代码
2013/12/19 Javascript
jquery $.trim()方法使用介绍
2014/05/21 Javascript
用C/C++来实现 Node.js 的模块(一)
2014/09/24 Javascript
javascript异步编程代码书写规范Promise学习笔记
2015/02/11 Javascript
jQuery增加自定义函数的方法
2015/07/18 Javascript
Javascript的表单验证长度
2016/03/16 Javascript
jQuery操作属性和样式详解
2016/04/13 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
jQuery分页插件jquery.pagination.js使用方法解析
2017/02/09 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
原生js FileReader对象实现图片上传本地预览效果
2020/03/27 Javascript
Angular2里获取(input file)上传文件的内容的方法
2017/09/05 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
python遍历文件目录、批量处理同类文件
2019/08/31 Python
TensorFlow2.0矩阵与向量的加减乘实例
2020/02/07 Python
python 爬取免费简历模板网站的示例
2020/09/27 Python
任意一块网页内容实现“活”的背景(目前火狐浏览器专有)
2014/05/07 HTML / CSS
西班牙美妆电商:Perfume’s Club(有中文站)
2018/08/08 全球购物
泰国Robinson百货官网:购买知名品牌的商品
2020/02/08 全球购物
Goodee官方商店:迷你投影仪
2021/03/15 全球购物
全球最大运动品牌的男装、女装和童装官方库存商:A&A Sports
2021/01/17 全球购物
县长“四风”对照检查材料思想汇报
2014/10/05 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
2015年生产部工作总结范文
2015/05/25 职场文书
创业计划书之废品回收
2019/09/26 职场文书
Nginx代理Redis哨兵主从配置的实现
2022/07/15 Servers