当前位置: 移动技术网 > IT编程>脚本编程>Python > Django使用中间件解决前后端同源策略问题

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

2019年09月06日  | 移动技术网IT编程  | 我要评论

pagedefrag,沁源县政府网,妃子谋王爷采花我采草

问题描述

前端时间在公司的时候,要使用angular开发一个网站,因为angular很适合前后端分离,所以就做了一个简单的图书管理系统来模拟前后端分离。

但是在开发过程中遇见了同源策略的跨域问题,页面能够显示,但是却没有数据,显示如下

右键检查报错如下:

报错代码如下

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',
]

至此,这个问题就算解决了,我们可以将项目运行起来看一下结果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网