一尘不染

Django-cors-headers不起作用

ajax

我的Django版本是1.8.6。我已将corsheaders文件夹复制到项目文件夹中。我已经点安装django-cors-headers(ver
1.1.0)。这是我的setting.py:

    INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'MyWebsite_app',
    'storages',
    'rest_framework',
    'corsheaders',
)

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
)

CORS_ORIGIN_ALLOW_ALL = True

这是我的jQuery:

function getLeague() {
$.ajax({
    url: 'http://otherdomain.ashx?username=xxx&password=xxx&sportsBook=xxx&sportsType=xxx&gameType=xxx',
    type: 'GET',
    dataType: 'json',
    success: function(data) {
        alert('Success');
    },
    error: function(data) {
        alert('Fail');
    }
    });
}

在执行getLeague()时,它会不断提醒“失败”。当我看到控制台时,它显示“
XMLHttpRequest无法加载http://otherdomain.ashx?username = xxx&password =
xxx&sportsBook = xxx&sportsType = xxx&gameType =
xxx
。所请求的源上没有Access-
Control-Allow-Origin标头”。我应该在urls.py或view.py中添加一些代码吗?谢谢。


阅读 623

收藏
2020-07-26

共1个答案

一尘不染

最好在您的应用程序中创建一个代理,该代理将依次调用另一个域并返回数据:

function getLeague() {
  $.ajax({
    url: '/crossdomainData',
    type: 'GET',
    dataType: 'json',
    success: function(data) {
        alert('Success');
    },
    error: function(data) {
        alert('Fail');
    }
    });
}

使用django时,可以导入 Django HTTP Proxy

介绍

Django HTTP代理为Django Web开发框架提供了简单的HTTP代理功能。
它允许您通过运行Django应用程序的主服务器向外部服务器发出请求。
此外,它还允许您记录对这些请求的响应并随时回放。

import urllib2
    def crossdomainData(request):
        url = "http://otherdomain.ashx?username=xxx&password=xxx&sportsBook=xxx&sportsType=xxx&gameType=xxx"
        req = urllib2.Request(url)
        response = urllib2.urlopen(req)
        return HttpResponse(response.read(), content_type="application/json")
2020-07-26