2017-01-05 4 views
0

Я пытаюсь использовать django-cors-middleware, чтобы разрешить совместное использование ресурсов на разных языках в моем Django-based API, размещенном на Heroku. Я следовал настройки, указанные в моем settings.py, а именно:Включить CORS в приложении Django на Heroku

INSTALLED_APPS = [ 
    ... 
    'corsheaders', 
] 

MIDDLEWARE_CLASSES = [ 
    'django.middleware.security.SecurityMiddleware', 
    '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', 
] 

CORS_ORIGIN_ALLOW_ALL = True 
CORS_ALLOW_CREDENTIALS = True 

(я показать 'django.middleware.clickjacking.XFrameOptionsMiddleware', потому что я прочитал в другой SO пост, который django-cors-middleware не работает с clickjacking промежуточного слоя, но это не похоже на работу либо путь.)

Я использую https://resttesttest.com для проверки. Когда я делаю запрос, он выплевывает: Oh no! Javascript returned an HTTP 0 error. One common reason this might happen is that you requested a cross-domain resource from a server that did not include the appropriate CORS headers in the response

+0

вы можете, пожалуйста, все завершенные код для MIDDLEWARE_CLASSES ... заказ вопросов промежуточного программного обеспечения. Хотите посмотреть, где у вас есть CorsMiddleware –

+0

@ChirdeepTomar Отредактировано. – cph2117

+1

Все кажется прекрасным ... вы можете попробовать с локальным файлом javascript. –

ответ

0

@ChirdeepTomar, да, это срабатывало при локальном тестировании. Я не уверен, почему это не сработало с resttesttest.com. Существует фантастический апплет для тестирования CORS локально, что я нашел here, и приводится ниже для удобства:

<html> 
<head>  
<title>Test for CORS</title>  
<script type="text/javascript"> 
function testcors(url){    
    var createCORSRequest = function(method, url) {     
     var xhr = new XMLHttpRequest();     
     if ("withCredentials" in xhr) {      
      xhr.open(method, url, true);     
     } 
     else if (typeof XDomainRequest != "undefined") {          
      xhr = new XDomainRequest();      
      xhr.open(method, url);     
     } 
     else {           
      xhr = null;     
     }     
     return xhr;    
    };    
    var method = 'GET';    
    var xhr = createCORSRequest(method, url);    
    xhr.onload = function() {        
     thendothis(true); //success    
    };    
    xhr.onerror = function() {     // Error code goes here.     
     thendothis(false);    
    };    
    xhr.send();    
    return iscors;   
}   
function thendothis(iscors){    
    var resptxt = "No";    
    if (iscors) { resptxt = "Yes"; }    
    document.getElementById("res").innerHTML = resptxt;   
}   
function runtest(frm){    
    testcors(frm.url.value);   
}  
</script> 
</head> 
<body>  
    <form>   
     URL: <input type="text" name="url" id="url" style="width:500px" /></br>   
     <input type="button" value="Test if CORS" onclick="runtest(this.form)" />  
    </form>  
    <div>URL is CORS: <span id="res"></span></div> 
</body> 
</html>