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的Scrapy框架编写web爬虫的简单示例
Apr 17 Python
python 队列详解及实例代码
Oct 18 Python
Python常用库推荐
Dec 04 Python
Django权限机制实现代码详解
Feb 05 Python
python 字典中文key处理,读取,比较方法
Jul 06 Python
详解Python学习之安装pandas
Apr 16 Python
OpenCV 边缘检测
Jul 10 Python
Django 拼接两个queryset 或是两个不可以相加的对象实例
Mar 28 Python
Python json转字典字符方法实例解析
Apr 13 Python
详解vscode实现远程linux服务器上Python开发
Nov 10 Python
pycharm激活码免费分享适用最新pycharm2020.2.3永久激活
Nov 25 Python
上帝为你开了一扇窗之Tkinter常用函数详解
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
对text数据类型不支持代码页转换 从: 1252 到: 936
2011/04/23 PHP
thinkPHP中配置的读取与C方法详解
2016/12/05 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
PHP中的输出echo、print、printf、sprintf、print_r和var_dump的示例代码
2020/12/01 PHP
JavaScript 事件记录使用说明
2009/10/20 Javascript
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
使用GruntJS构建Web程序之Tasks(任务)篇
2014/06/06 Javascript
ext中store.load跟store.reload的区别示例介绍
2014/06/17 Javascript
javascript使用shift+click实现选择和反选checkbox的方法
2015/05/04 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
利用Js+Css实现折纸动态导航效果实例源码
2017/01/25 Javascript
详解webpack的配置文件entry与output
2017/08/21 Javascript
JS实现的抛物线运动效果示例
2018/01/30 Javascript
Bootstrap-table自定义可编辑每页显示记录数
2018/09/07 Javascript
Js 利用正则表达式和replace函数获取string中所有被匹配到的文本(推荐)
2018/10/28 Javascript
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
基于python的七种经典排序算法(推荐)
2016/12/08 Python
深入理解Python中的内置常量
2017/05/20 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
Python实现PS滤镜中马赛克效果示例
2018/01/20 Python
python多进程实现文件下载传输功能
2018/07/28 Python
对web.py设置favicon.ico的方法详解
2018/12/04 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
Opencv+Python实现图像运动模糊和高斯模糊的示例
2019/04/11 Python
Python实现弹球小游戏
2020/08/01 Python
Python接收手机短信的代码整理
2020/08/02 Python
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
幼儿园教师国培感言
2014/02/02 职场文书
大学校园活动策划书
2014/02/04 职场文书
《水上飞机》教学反思
2014/04/10 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
小升初自荐信范文
2015/03/05 职场文书
2015年材料员工作总结
2015/04/30 职场文书
关于远足的感想
2015/08/10 职场文书
MySQL中JOIN连接的基本用法实例
2022/06/05 MySQL