我的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中添加一些代码吗?谢谢。
最好在您的应用程序中创建一个代理,该代理将依次调用另一个域并返回数据:
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应用程序的主服务器向外部服务器发出请求。 此外,它还允许您记录对这些请求的响应并随时回放。
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")