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操作SQLite简明教程
Jul 10 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
Apr 08 Python
Python 实现文件的全备份和差异备份详解
Dec 27 Python
基于python中staticmethod和classmethod的区别(详解)
Oct 24 Python
django上传图片并生成缩略图方法示例
Dec 11 Python
python的Tqdm模块的使用
Jan 10 Python
使用Python和xlwt向Excel文件中写入中文的实例
Apr 21 Python
用python一行代码得到数组中某个元素的个数方法
Jan 28 Python
通过PHP与Python代码对比的语法差异详解
Jul 10 Python
如何使用repr调试python程序
Feb 28 Python
Python能做什么
Jun 02 Python
获取python运行输出的数据并解析存为dataFrame实例
Jul 07 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 APC配置文件2套和参数详解
2014/06/11 PHP
php设计模式之工厂模式用法经典实例分析
2019/09/20 PHP
jQuery 性能优化指南(2)
2009/05/21 Javascript
原生js的弹出层且其内的窗口居中
2014/05/14 Javascript
学习javascript面向对象 理解javascript原型和原型链
2016/01/04 Javascript
webpack中引用jquery的简单实现
2016/06/08 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
2017/03/09 Javascript
JSONP基础知识详解
2017/03/19 Javascript
Angular 作用域scope的具体使用
2017/12/11 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
Vue封装的组件全局注册并引用
2019/07/24 Javascript
JavaScript TAB栏切换效果的示例
2020/11/05 Javascript
微信小程序向Java后台传输参数的方法实现
2020/12/10 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
Python监控主机是否存活并以邮件报警
2015/09/22 Python
python魔法方法-自定义序列详解
2016/07/21 Python
python:socket传输大文件示例
2017/01/18 Python
Django配置celery(非djcelery)执行异步任务和定时任务
2018/07/16 Python
利用Pyhton中的requests包进行网页访问测试的方法
2018/12/26 Python
Python实现的爬取百度文库功能示例
2019/02/16 Python
python实现二维数组的对角线遍历
2019/03/02 Python
详解Python列表赋值复制深拷贝及5种浅拷贝
2019/05/15 Python
tensorflow中tf.slice和tf.gather切片函数的使用
2020/01/19 Python
python实现飞船大战
2020/04/24 Python
如何使用python-opencv批量生成带噪点噪线的数字验证码
2020/12/21 Python
德国户外商店:eXXpozed
2020/07/25 全球购物
大学生在校学习的自我评价
2014/02/18 职场文书
民主评议党员登记表自我评价
2014/10/20 职场文书
信访维稳工作汇报
2014/10/27 职场文书
优秀教师个人材料
2014/12/15 职场文书
高考诚信考试承诺书
2015/04/29 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
分享Python异步爬取知乎热榜
2022/04/12 Python