Django使用中间件解决前后端同源策略问题

作者:YifChan 时间:2022-09-05 10:33:32 

问题描述

前端时间在公司的时候,要使用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使用中间件解决前后端同源策略问题

来源:https://www.cnblogs.com/yifchan/p/python-1-32.html

标签:django,中间件,前端,后端,同源
0
投稿

猜你喜欢

  • Python:Scrapy框架中Item Pipeline组件使用详解

    2021-04-18 22:22:47
  • SQL提高查询效率之Like篇

    2011-10-01 09:36:42
  • SQL 2008 FileStream数据类型

    2008-10-28 21:07:00
  • 用javascript实现select的美化

    2007-05-11 16:50:00
  • Python学习之包与模块详解

    2021-05-26 03:40:07
  • 使用Python实现从各个子文件夹中复制指定文件的方法

    2023-11-09 12:04:05
  • 在 SQL Server 数据库开发中的十大问题

    2009-07-02 16:39:00
  • PL/SQL数据类型及操作符

    2009-02-26 11:17:00
  • Python-jenkins模块获取jobs的执行状态操作

    2022-07-29 14:15:09
  • SQL Server 2005中的CLR集成

    2009-03-10 15:07:00
  • Python程序设计入门(4)模块和包

    2023-06-18 11:37:36
  • 经典分享MySQL的limit查询优化

    2011-05-05 15:47:00
  • Css 清除浮动

    2008-09-15 18:47:00
  • ASP编写计数器的优化方法

    2009-01-21 19:46:00
  • python time模块时间戳 与 结构化时间详解

    2021-04-09 11:06:42
  • 自己用的ASP分页函数

    2009-10-18 11:30:00
  • Python异常处理如何才能写得优雅(retrying模块)

    2023-07-13 05:50:44
  • mysql如何跨时区迁移数据

    2010-03-25 10:26:00
  • 用数据库生成不重复的流水号

    2007-10-06 22:49:00
  • php文件类型MIME对照表(比较全)

    2023-06-08 07:24:10
  • asp之家 网络编程 m.aspxhome.com