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中的JSON模块
Apr 08 Python
Python基于分水岭算法解决走迷宫游戏示例
Sep 26 Python
python之pandas用法大全
Mar 13 Python
Python贪心算法实例小结
Apr 22 Python
python获取交互式ssh shell的方法
Feb 14 Python
Django 简单实现分页与搜索功能的示例代码
Nov 07 Python
python解析命令行参数的三种方法详解
Nov 29 Python
Python安装与卸载流程详细步骤(图解)
Feb 20 Python
使用python采集Excel表中某一格数据
May 14 Python
python创建文本文件的简单方法
Aug 30 Python
python 如何在 Matplotlib 中绘制垂直线
Apr 02 Python
Python标准库之typing的用法(类型标注)
Jun 02 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手机号码归属地查询代码(API接口/mysql)
2012/09/04 PHP
php递归法读取目录及文件的方法
2015/01/30 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
javascript实现网页子页面遍历回调的方法(涉及 window.frames、递归函数、函数上下文)
2015/07/27 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
Highcharts使用简例及异步动态读取数据
2015/12/30 Javascript
JavaScript实现图像模糊化的方法实例
2017/01/15 Javascript
使用node.js对音视频文件加密的实例代码
2017/08/30 Javascript
Vue中的异步组件函数实现代码
2018/07/20 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
2018/08/20 Javascript
NodeJS加密解密及node-rsa加密解密用法详解
2018/10/12 NodeJs
js 下拉菜单点击旁边收起实现(踩坑记)
2019/09/29 Javascript
微信小程序实现打卡签到页面
2020/09/21 Javascript
python爬虫教程之爬取百度贴吧并下载的示例
2014/03/07 Python
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
python查询mysql,返回json的实例
2018/03/26 Python
Django实现分页功能
2018/07/02 Python
简单的Python调度器Schedule详解
2019/08/30 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
快速创建 HTML5 Canvas 电信网络拓扑图的示例代码
2018/03/21 HTML / CSS
阿玛尼美妆英国官网:Giorgio Armani Beauty英国
2019/03/28 全球购物
阿联酋彩妆品牌:OUD MILANO
2019/10/06 全球购物
车间统计员岗位职责
2014/01/05 职场文书
美容院考勤制度
2014/01/30 职场文书
酒店员工检讨书
2014/02/18 职场文书
营销总监岗位职责范本
2014/02/26 职场文书
2014购房个人委托书范本
2014/10/12 职场文书
安全生产工作汇报材料
2014/10/28 职场文书
优秀团员事迹材料
2014/12/25 职场文书
2015年暑假生活总结
2015/07/13 职场文书
2016小学新学期寄语
2015/12/04 职场文书
python实现的人脸识别打卡系统
2021/05/08 Python
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
2022/03/22 MySQL