jquery - Django-cors-headers 不工作

标签 jquery python ajax django django-cors-headers

我的 django 版本是 1.8.6。我已将 corsheaders 文件夹复制到项目文件夹中。我已经 pip 安装了 django-cors-headers(版本 1.1.0)。这是我的设置.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 header ”。我应该在 urls.py 还是 view.py 中添加一些代码?谢谢。

最佳答案

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

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

因为你使用的是django,你可以导入这个Django HTTP Proxy .

Introduction

Django HTTP Proxy provides simple HTTP proxy functionality for the Django web development framework. It allows you make requests to an external server by requesting them from the main server running your Django application. In addition, it allows you to record the responses to those requests and play them back at any time.


这里有另一个选项 taken from this post@dvcrn 回答.

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")

关于jquery - Django-cors-headers 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35623792/

相关文章:

javascript - 可从图像叠加层访问输入

javascript - 有没有办法延迟 popstate 事件?

jquery - $.ajax 中的响应类型

javascript - ajax 调用 PHP 数据返回 VM92 :1 Uncaught SyntaxError: Unexpected token {

javascript - 在 Fancybox 中打开自动完成的结果

javascript - javascript递归函数错误

python - 将一系列数字转换为唯一的、随机出现的字符串

php - 无需回发自动从服务器向客户端发送警报消息

Python - 如何获取每个列表的第一行?

python - 如何以正确的格式将抓取的数据导出到 csv 文件?