一尘不染

django中的“请求的资源上不存在'Access-Control-Allow-Origin'标头”

django

我是django的新手,并将其用作创建用户的应用程序的后端。在前端发布用户名的代码是:

var xobj = new XMLHttpRequest();
              xobj.overrideMimeType("application/json");
              xobj.open('POST', "http://www.local:8000/create_user/", true);
                xobj.setRequestHeader("Access-Control-Allow-Origin", "*");
              xobj.onreadystatechange = function () {
                  if (xobj.readyState == 4 && xobj.status == "200") {
                      console.log(xobj.responseText);
                  }
            }
              xobj.send(json);    

在后端,与url相关的功能处理json,但我收到错误消息“请求的资源上没有’Access-Control-Allow-Origin’标头。


阅读 1039

收藏
2020-04-02

共2个答案

一尘不染

你的前端和后端位于不同的端口上,这意味着你的ajax请求受跨源安全性的约束。

你需要设置后端以接受来自不同来源(或只是不同端口号)的请求。

2020-04-02
一尘不染

这是我在从Restangular发送API请求时,从Django Rest Framework中收到相同错误时所做的事情。这是在Django Rest Framework的响应中添加CORS(跨源资源共享)标头。没有CORS标头是导致错误的原因。

在Django Project根文件夹(manage.py文件所在的位置)中,执行以下操作:

pip install django-cors-headers

我使用virtualenv进行了尝试,但无法使其正常工作,因此我在不切换至virtualenv的情况下安装了它并安装了它。

安装后,你必须对django settings.py进行一些编辑

INSTALLED_APPS = (
    ...
    'corsheaders',
    ...
)

MIDDLEWARE_CLASSES = (
    ...
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    ...
)

CORS_ORIGIN_ALLOW_ALL = True 

将上面的设置为true可以接受所有来源。

2020-04-02