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 paramiko实现ssh远程访问的方法
Dec 03 Python
Python XML RPC服务器端和客户端实例
Nov 22 Python
利用Python中的mock库对Python代码进行模拟测试
Apr 16 Python
python代码 if not x: 和 if x is not None: 和 if not x is None:使用介绍
Sep 21 Python
python非递归全排列实现方法
Apr 10 Python
python实现从pdf文件中提取文本,并自动翻译的方法
Nov 28 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
Tensorflow限制CPU个数实例
Feb 06 Python
python logging设置level失败的解决方法
Feb 19 Python
python GUI库图形界面开发之PyQt5复选框控件QCheckBox详细使用方法与实例
Feb 28 Python
Python小白不正确的使用类变量实例
May 29 Python
Python实现数字的格式化输出
Aug 01 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
正义联盟的终局之战《天启星战争》将成为DC动画宇宙的最后一部
2020/04/09 欧美动漫
php实现的九九乘法口诀表简洁版
2014/07/28 PHP
PHP数据库处理封装类实例
2016/12/24 PHP
PHP实现数据库统计时间戳按天分组输出数据的方法
2017/10/10 PHP
PHP CURL中传递cookie的方法步骤
2019/05/09 PHP
js 无提示关闭浏览器页面的代码
2010/03/09 Javascript
DIY jquery plugin - tabs标签切换实现代码
2010/12/11 Javascript
JS中图片缓冲loading技术的实例代码
2013/08/29 Javascript
JavaScript学习笔记之基础语法
2015/01/22 Javascript
jQuery入门基础知识学习指南
2015/08/14 Javascript
老生常谈JavaScript 函数表达式
2016/09/01 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
Vue2.0用户权限控制解决方案
2017/11/29 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
如何提升vue.js中大型数据的性能
2019/06/21 Javascript
Vue通过for循环随机生成不同的颜色或随机数的实例
2019/11/09 Javascript
openLayer4实现动态改变标注图标
2020/08/17 Javascript
python三元运算符实现方法
2013/12/17 Python
python获取图片颜色信息的方法
2015/03/18 Python
Python的SQLAlchemy框架使用入门
2015/04/29 Python
Python进行数据提取的方法总结
2016/08/22 Python
python数据结构之列表和元组的详解
2017/09/23 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
postman模拟访问具有Session的post请求方法
2019/07/15 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
python GUI库图形界面开发之PyQt5表单布局控件QFormLayout详细使用方法与实例
2020/03/06 Python
详解CSS3 用border写 空心三角箭头 (两种写法)
2017/09/29 HTML / CSS
军训自我鉴定怎么写
2014/02/13 职场文书
留守儿童工作方案
2014/06/02 职场文书
2014年政风行风评议工作总结
2014/10/21 职场文书
2014年化验室工作总结
2014/11/21 职场文书
2015年社区精神文明工作总结
2015/05/26 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书
react国际化react-intl的使用
2021/05/06 Javascript
梳理总结Python开发中需要摒弃的18个坏习惯
2022/01/22 Python