Nginx и Django Rest Api Call - PullRequest
       15

Nginx и Django Rest Api Call

0 голосов
/ 08 марта 2019

В настоящее время я занимаюсь разработкой веб-приложения NER со следующим стеком:

  1. Ubuntu 18.04.1 x64
  2. Версия nginx: nginx / 1.14.0 (Ubuntu)
  3. Джанго 1.11.20

(я только следовал этому уроку https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04)

Моя цель - создать конечную точку API REST. Поскольку я не использую какую-либо модель Django, я решил не использовать Django rest api framework. Я создал простую функцию обработчика вида:

@csrf_exempt
def test(request):
    data = json.loads(request.body.decode('utf8'))

    #do some tensorflow stuff here, and return predictions

    data['res'] = "String that might contain unicode chars, e.g č,š or others"
    return JsonResponse(data, safe=False)

А я вызываю функцию из ИП:

var url = baseURL + "/ner/api/predict"
var xmlhttp = new XMLHttpRequest();
var data = {
    "sentence" : "String that might contain unicode chars, e.g č,š or others"
}
xmlhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
        var response = JSON.parse(this.responseText);
        console.log(response )
    }
};
xmlhttp.open("POST", url, true);
xmlhttp.setRequestHeader('Content-type', 'application/json')
xmlhttp.send(JSON.stringify(data));

Это хорошо работает в моем местном dev. окружение (win10 + django). Проблема возникает, когда я отправляю эту кодовую базу на сервер, CORS кажется проблемой.

ner.js:83 OPTIONS <url here>/ner/api/predict 500 (Internal Server Error)
<url here>/:1 Access to XMLHttpRequest at '<url here>/ner/api/predict' from origin '<url here>' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.

Итак, я попытался отредактировать свою конфигурацию nginx, но не могу решить эту проблему.

 location / {
    add_header Access-Control-Allow-Origin '*' always;
    add_header Access-Control-Allow-Credentials true;
    add_header Access-Control-Allow-Methods 'GET, POST, PUT, DELETE, OPTIONS' always;
    add_header Access-Control-Allow-Headers 'Accept,Authorization,Cache-Control,Content-Type,DNT,If-Modified-Sin$
    add_header Access-Control-Max-Age 1728000 always;
    include proxy_params;
    proxy_connect_timeout 100s;
    proxy_send_timeout 100s;
    proxy_read_timeout 100s;
    proxy_pass http://unix:/home/<path>.sock;
 }

Есть ли способ, как исправить эту проблему? Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...