Javascript Django MongoEngine CORS错误

Javascript Django MongoEngine CORS错误,javascript,python,mongodb,django-rest-framework,cors,Javascript,Python,Mongodb,Django Rest Framework,Cors,我正在使用django 1.11.7,并且安装了django cors侦听器。我一直在尝试将POST请求中的自定义头发送到我的DRF应用程序,但出现以下错误: 对飞行前请求的响应未通过访问控制检查:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许使用源“” 通道响应的HTTP状态代码为400 localhost:3000是调用应用程序的宿主。 javascript POST请求具有以下标题: headers.append('Access-

我正在使用django 1.11.7,并且安装了django cors侦听器。我一直在尝试将POST请求中的自定义头发送到我的DRF应用程序,但出现以下错误:

对飞行前请求的响应未通过访问控制检查:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许使用源“” 通道响应的HTTP状态代码为400

localhost:3000是调用应用程序的宿主。 javascript POST请求具有以下标题:

headers.append('Access-Control-Allow-Origin','*');
headers.append("Access-Control-Allow-Methods", "GET, HEAD, OPTIONS, POST, PUT");
headers.append("Access-Control-Allow-Headers","Origin, header-one, X-Requested-With, Content-Type, Accept, Authorization, If-Modified-Since, Cache-Control, Pragma");
headers.append('Content-Type', 'application/json');
headers.append('header-one', "value@123");
我尝试了以下方法:

1) 修改了my django应用程序视图函数

if str(request.method).lower() == 'options':
        headers = {
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Methods": "POST",
            "Access-Control-Allow-Headers": "HTTP_HEADER_ONE"
        }
        return Response({}, headers=headers, status=status.HTTP_200_OK)
2) 在settings.py的MIDDLEWARE=[…]中注释掉这一行:

'django.middleware.clickjacking.XFrameOptionsMiddleware'
因为它显然与cors中间件有关

3) 将以下代码添加到settings.py

INSTALLED_APPS = [....
'corsheaders',
...
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
...
]
4) CORS配置:

CORS_ORIGIN_ALLOW_ALL = True

from corsheaders.defaults import default_headers
CORS_ALLOW_HEADERS = default_headers + (
    'header-one',
) 
现在我得到了这个错误:

不允许请求标头字段访问控制允许来源 访问控制允许飞行前响应中的标头

5) 服务器配置(在settings.py自身中)

这还会引发一个错误,说明“没有名为connector的模块”。我做了更多关于“连接器”的研究,显然这是针对MySQL类型的数据库,但我正在使用mongodb(mongoengine与django一起工作)


我做错了什么?

这可能会帮助你。我在djangularjs应用程序中使用了此配置

(function() {
    'use strict';

    angular
        .module('app_name.config')
        .config(config);

    config.$inject = ['$locationProvider', '$httpProvider'];

    /**
     * @name config
     * @desc Enable HTML5 routing
     */
    function config($locationProvider, $httpProvider) {
        $locationProvider.html5Mode(true);
        $locationProvider.hashPrefix('');

        $httpProvider.defaults.xsrfCookieName = 'csrftoken';
        $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken';
    }

})();
我明白了

1) 在客户端,头应该只包括自定义头,这将使代码:

headers.append('Content-Type', 'application/json');
headers.append('header-one', "value@123");
2) 在django应用程序视图中不做任何更改。因此,如果视图函数存在,请从中删除以下行:

if str(request.method).lower() == 'options':
        headers = {
            "Access-Control-Allow-Origin": "*",
            "Access-Control-Allow-Methods": "POST",
            "Access-Control-Allow-Headers": "HTTP_HEADER_ONE"
        }
        return Response({}, headers=headers, status=status.HTTP_200_OK)
3) 在settings.py中添加以下行:

'django.middleware.clickjacking.XFrameOptionsMiddleware'
(运行django应用程序时使用CORS设置)

(用于访问django应用程序的URL)

(用于来自客户端的请求对象头)

(用于发送到客户端的响应对象头)

4) 使用连接器加载_server_list()函数。不需要服务器


这些标题可以在项目级别访问,因此每个视图函数都不需要显式返回对选项请求的响应。django cors headers会帮你处理。有关更明确的配置设置,请查看:

我觉得客户端配置似乎不错,但可能缺少一些django enable CORS配置-@Keshanageswaran我按照链接添加了load_server_list()方法,但它给了我一个错误:没有模块名称“connector”。还有什么要安装的吗?
INSTALLED_APPS = [....
'corsheaders',
...
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
...
]
CORS_ORIGIN_ALLOW_ALL = True
CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = ('tuple of urls allowed to access your app')
from corsheaders.defaults import default_headers
CORS_ALLOW_HEADERS = default_headers + (
    'header-one',
) 
CORS_EXPOSE_HEADERS = ['list of headers to send']