阅读 145

Django 解决跨域访问API失败问题

解决跨域访问API失败问题

 

By:授客 QQ103355122

 

实践环境

Win 10

 

Python 3.5.4

 

Django-2.0.13.tar.gz

官方下载地址:

 

vue 2.5.2

 

django-cors-headers-3.0.2.tar.gz

下载地址:

 

问题描述

vue组件中访问django服务端api时,提示以下问题

Access to XMLHttpRequest at ‘http://localhost:8000/api/v1/sprints/details‘ from origin ‘http://localhost:8080‘ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin‘ header is present on the requested resource.

 

原因分析:跨域访问导致

 

解决方法 

安装django-cores-headers

pip install django-cors-headers

或者通过下载安装包的方式安装

 

项目settings.py配置

找到INSTALLED_APPS,添加 corsheaders

INSTALLED_APPS = [

...略

‘corsheaders‘

]

 

找到MIDDLEWARE,添加 corsheaders.middleware.CorsMiddleware

MIDDLEWARE = [ # Or MIDDLEWARE_CLASSES on Django < 1.10

...略

‘corsheaders.middleware.CorsMiddleware‘,

‘django.middleware.common.CommonMiddleware‘,

...略

]

 

注意:

1、CorsMiddleware尽可能放在上方,特别是会生成response的中间之前,比如 CommonMiddleware 、WhiteNoiseMiddleware,否则不能给这些response添加CORS请求头。

2、如果正在使用CORS_REPLACE_HTTPS_REFERER,django-cors-headers,将其放在CsrfViewMiddleware 之前。

 

在MIDDLEWARE变量之后添加以下代码

CORS_ALLOW_CREDENTIALS = True

CORS_ORIGIN_ALLOW_ALL = True

 

必要时还可以再添加CORS_ALLOW_HEADERS变量,设置允许的请求头,如下

CORS_ALLOW_HEADERS = (‘authorization‘, ‘Content-Disposition‘)

也可以写成如下,允许所有请起头(不过实践时发现,有时候似乎不起作用,需要指定具体的请求头)

CORS_ALLOW_HEADERS = (‘*‘)

 

实践发现,给POST请求添加X-CSRFTOKEN请求头时,需要在CORS_ALLOW_HEADERS中设置x-csrftoken请求头,如下:

CORS_ALLOW_HEADERS = (‘x-csrftoken‘, ‘authorization‘, ‘content-type‘)

不然会报类似以下错误:

Access to XMLHttpRequest at ‘http://localhost:8000/api/v1/sys-user/userinfo‘ from origin ‘http://localhost:8080‘ has been blocked by CORS policy: Request header field authorization is not allowed by Access-Control-Allow-Headers in preflight response.

 

 

参考链接

 

  

 

原文:https://www.cnblogs.com/shouke/p/13702804.html

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐